106 lines
1.8 KiB
C++
106 lines
1.8 KiB
C++
/*
|
|
* Copyright (c) 2018 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: 2026-01-04
|
|
*
|
|
* 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.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <maxscale/ccdefs.hh>
|
|
|
|
#include <memory>
|
|
#include <sstream>
|
|
#include <string>
|
|
|
|
#include <maxbase/assert.h>
|
|
#include <maxbase/jansson.h>
|
|
#include <maxbase/alloc.h>
|
|
|
|
namespace std
|
|
{
|
|
|
|
template<>
|
|
struct default_delete<json_t>
|
|
{
|
|
void operator()(json_t* pJson)
|
|
{
|
|
json_decref(pJson);
|
|
}
|
|
};
|
|
}
|
|
|
|
namespace maxscale
|
|
{
|
|
|
|
/**
|
|
* @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;
|
|
}
|
|
|
|
/**
|
|
* @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:
|
|
mxb_assert(false);
|
|
break;
|
|
}
|
|
|
|
return ss.str();
|
|
}
|
|
}
|