2017-06-01 10:24:20 +03:00

121 lines
2.1 KiB
C++

#pragma once
/*
* Copyright (c) 2016 MariaDB Corporation Ab
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
*
* Change Date: 2020-01-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2 or later of the General
* Public License.
*/
#include <maxscale/cppdefs.hh>
#include <sstream>
#include <string>
#include <maxscale/alloc.h>
#include <maxscale/debug.h>
#include <maxscale/jansson.h>
#include <maxscale/utils.hh>
namespace maxscale
{
/**
* @class CloserTraits<json_t*> jansson.hh <maxscale/jansson.hh>
*
* Specialization of @c CloserTraits for @c json_t*.
*/
template<>
struct CloserTraits<json_t*>
{
static void close_if(json_t* pJson)
{
if (pJson)
{
json_decref(pJson);
}
}
static void reset(json_t*& pJson)
{
pJson = NULL;
}
};
/**
* @brief Convenience function for dumping JSON into a string
*
* @param json JSON to dump
*
* @return The JSON in string format
*/
static inline std::string json_dump(const json_t* json, int flags = 0)
{
std::string rval;
char* js = json_dumps(json, flags);
if (js)
{
rval = js;
MXS_FREE(js);
}
return rval;
}
static inline std::string json_dump(const Closer<json_t*>& json, int flags = 0)
{
return json_dump(json.get(), flags);
}
/**
* @brief Convert JSON to string
*
* @param JSON to convert
*
* @return The JSON value converted to a string
*/
static inline std::string json_to_string(json_t* json)
{
std::stringstream ss;
switch (json_typeof(json))
{
case JSON_STRING:
ss << json_string_value(json);
break;
case JSON_INTEGER:
ss << json_integer_value(json);
break;
case JSON_REAL:
ss << json_real_value(json);
break;
case JSON_TRUE:
ss << "true";
break;
case JSON_FALSE:
ss << "false";
break;
case JSON_NULL:
break;
default:
ss_dassert(false);
break;
}
return ss.str();
}
}