mirror of https://github.com/oxen-io/lokinet
Convert from rapidjson to use nlohmann::json
parent
93399fdbb4
commit
31441b46dc
@ -1,121 +1,64 @@
|
||||
#include <util/status.hpp>
|
||||
|
||||
#include <util/traits.hpp>
|
||||
|
||||
namespace llarp
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
StatusObject::StatusObject(const StatusObject& other)
|
||||
{
|
||||
Impl.SetObject();
|
||||
auto& a = Impl.GetAllocator();
|
||||
Impl.CopyFrom(other.Impl, a);
|
||||
}
|
||||
|
||||
StatusObject::~StatusObject()
|
||||
{
|
||||
Impl.RemoveAllMembers();
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::Put(const value_type& val)
|
||||
{
|
||||
Put(std::get< 0 >(val), std::get< 1 >(val));
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::Put(String_t name, const Variant& val)
|
||||
{
|
||||
if(absl::holds_alternative< uint64_t >(val))
|
||||
PutInt(name, absl::get< uint64_t >(val));
|
||||
else if(absl::holds_alternative< std::string >(val))
|
||||
PutString(name, absl::get< std::string >(val));
|
||||
else if(absl::holds_alternative< bool >(val))
|
||||
PutBool(name, absl::get< bool >(val));
|
||||
else if(absl::holds_alternative< StatusObject >(val))
|
||||
PutObject(name, absl::get< StatusObject >(val));
|
||||
else if(absl::holds_alternative< std::vector< std::string > >(val))
|
||||
PutStringArray(name, absl::get< std::vector< std::string > >(val));
|
||||
else if(absl::holds_alternative< std::vector< StatusObject > >(val))
|
||||
PutObjectArray(name, absl::get< std::vector< StatusObject > >(val));
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::PutBool(String_t name, bool val)
|
||||
struct StatusVisitor
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetBool(val);
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::PutInt(String_t name, uint64_t val)
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetUint64(val);
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
}
|
||||
std::string name;
|
||||
std::reference_wrapper< nlohmann::json > data;
|
||||
|
||||
void
|
||||
StatusObject::PutObject(String_t name, const StatusObject& val)
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetObject();
|
||||
v.CopyFrom(val.Impl, a);
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::PutObjectArray(String_t name,
|
||||
const std::vector< StatusObject >& arr)
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetArray();
|
||||
Value_t i;
|
||||
for(const auto& obj : arr)
|
||||
StatusVisitor(StatusObject::String_t n, nlohmann::json& d)
|
||||
: name(n), data(d)
|
||||
{
|
||||
v.PushBack(i.SetObject().CopyFrom(obj.Impl, a), a);
|
||||
}
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::PutStringArray(String_t name,
|
||||
const std::vector< std::string >& arr)
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetArray();
|
||||
Value_t i;
|
||||
for(const auto& str : arr)
|
||||
void
|
||||
operator()(uint64_t val)
|
||||
{
|
||||
v.PushBack(i.SetString(str.c_str(), a), a);
|
||||
data.get()[name] = val;
|
||||
}
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
void
|
||||
operator()(const std::string& val)
|
||||
{
|
||||
data.get()[name] = val;
|
||||
}
|
||||
void
|
||||
operator()(bool val)
|
||||
{
|
||||
data.get()[name] = val;
|
||||
}
|
||||
void
|
||||
operator()(const StatusObject& obj)
|
||||
{
|
||||
data.get()[name] = obj.Impl;
|
||||
}
|
||||
void
|
||||
operator()(const std::vector< std::string >& val)
|
||||
{
|
||||
data.get()[name] = val;
|
||||
}
|
||||
void
|
||||
operator()(const std::vector< StatusObject >& val)
|
||||
{
|
||||
auto arr = nlohmann::json::array();
|
||||
std::transform(val.begin(), val.end(), std::back_inserter(arr),
|
||||
[](const auto& x) { return x.Impl; });
|
||||
data.get()[name] = arr;
|
||||
}
|
||||
};
|
||||
void
|
||||
StatusObject::Put(const value_type& val)
|
||||
{
|
||||
Put(std::get< 0 >(val), std::get< 1 >(val));
|
||||
}
|
||||
|
||||
void
|
||||
StatusObject::PutString(String_t name, const std::string& val)
|
||||
StatusObject::Put(String_t name, const Variant& data)
|
||||
{
|
||||
auto& a = Impl.GetAllocator();
|
||||
Value_t v;
|
||||
v.SetString(val.c_str(), a);
|
||||
auto s = llarp::string_view_string(name);
|
||||
Value_t k(s.c_str(), a);
|
||||
Impl.AddMember(k, v, a);
|
||||
absl::visit(StatusVisitor{name, Impl}, data);
|
||||
}
|
||||
} // namespace util
|
||||
} // namespace llarp
|
||||
|
Loading…
Reference in New Issue