Clio  develop
The XRP Ledger API server.
Loading...
Searching...
No Matches
JsonBool.hpp
1#pragma once
2
3#include <boost/json/conversion.hpp>
4#include <boost/json/kind.hpp>
5#include <boost/json/value.hpp>
6#include <boost/json/value_to.hpp>
7
8#include <stdexcept>
9
10namespace rpc {
11
15struct JsonBool {
16 bool value = false;
17
19 operator bool() const
20 {
21 return value;
22 }
24};
25
32inline JsonBool
33tag_invoke(boost::json::value_to_tag<JsonBool> const&, boost::json::value const& jsonValue)
34{
35 switch (jsonValue.kind()) {
36 case boost::json::kind::null:
37 return JsonBool{false};
38 case boost::json::kind::bool_:
39 return JsonBool{jsonValue.as_bool()};
40 case boost::json::kind::uint64:
41 [[fallthrough]];
42 case boost::json::kind::int64:
43 return JsonBool{jsonValue.as_int64() != 0};
44 case boost::json::kind::double_:
45 return JsonBool{jsonValue.as_double() != 0.0};
46 case boost::json::kind::string:
47 // Also should be `jsonValue.as_string() != "false"` but rippled doesn't do
48 // that. Anyway for v2 api we have bool validation
49 return JsonBool{!jsonValue.as_string().empty() && jsonValue.as_string()[0] != 0};
50 case boost::json::kind::array:
51 return JsonBool{!jsonValue.as_array().empty()};
52 case boost::json::kind::object:
53 return JsonBool{!jsonValue.as_object().empty()};
54 }
55 throw std::runtime_error("Invalid json value");
56}
57
58} // namespace rpc
This namespace contains all the RPC logic and handlers.
Definition AMMHelpers.cpp:18
void tag_invoke(boost::json::value_from_tag, boost::json::value &jv, BookChange const &change)
Implementation of value_from for BookChange type.
Definition BookChangesHelper.hpp:233
A wrapper around bool that allows to convert from any JSON value.
Definition JsonBool.hpp:15