Files
MaxScale/include/maxscale/jansson.hh
Markus Mäkelä 043ed95bdf MXS-1220: Add PUT support for servers
The server can now be modified with a PUT request of a modified server
resource. The server resource was reorganized to have the parameters as a
separate entity from the other more general entities of the resource.

The PUT/POST functions return a more appropriate error message when no
request body is provided.

Moved some of the constant names used in server.cc into the config.h
header.
2017-05-04 09:14:04 +03:00

114 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: 2019-07-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 <string>
#include <sstream>
#include <maxscale/jansson.h>
#include <maxscale/utils.hh>
#include <maxscale/alloc.h>
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;
if (json_is_string(json))
{
ss << json_string_value(json);
}
else if (json_is_boolean(json))
{
ss << (json_boolean_value(json) ? "true" : "false");
}
else if (json_is_real(json))
{
ss << json_real_value(json);
}
else if (json_is_number(json))
{
ss << json_number_value(json);
}
else if (json_is_integer(json))
{
ss << json_integer_value(json);
}
else if (json_is_null(json))
{
ss << "";
}
return ss.str();
}
}