mirror of
https://github.com/matrix-construct/construct
synced 2024-11-17 15:30:52 +01:00
ircd::json: Add missing stringify participant; minor cleanup.
This commit is contained in:
parent
9b5834afd4
commit
78e8a3668d
3 changed files with 37 additions and 22 deletions
|
@ -70,6 +70,7 @@ namespace ircd::json
|
||||||
struct strung;
|
struct strung;
|
||||||
|
|
||||||
size_t serialized(const string_view &);
|
size_t serialized(const string_view &);
|
||||||
|
string_view stringify(mutable_buffer &, const string_view &);
|
||||||
|
|
||||||
struct string;
|
struct string;
|
||||||
using members = std::initializer_list<member>;
|
using members = std::initializer_list<member>;
|
||||||
|
|
|
@ -659,6 +659,28 @@ runtil(tuple &t,
|
||||||
false;
|
false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
constexpr bool
|
||||||
|
serialized_lex_cast()
|
||||||
|
{
|
||||||
|
using type = typename std::remove_reference<T>::type;
|
||||||
|
return std::is_arithmetic<type>::value;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename std::enable_if<serialized_lex_cast<T>(), size_t>::type
|
||||||
|
serialized(T&& t)
|
||||||
|
{
|
||||||
|
return lex_cast(t).size();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
typename std::enable_if<serialized_lex_cast<T>(), bool>::type
|
||||||
|
defined(T&& t)
|
||||||
|
{
|
||||||
|
return t != typename std::remove_reference<T>::type {0};
|
||||||
|
}
|
||||||
|
|
||||||
template<class dst,
|
template<class dst,
|
||||||
class src>
|
class src>
|
||||||
typename std::enable_if
|
typename std::enable_if
|
||||||
|
@ -959,28 +981,6 @@ _member_transform(const tuple<T...> &tuple,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
constexpr bool
|
|
||||||
serialized_lex_cast()
|
|
||||||
{
|
|
||||||
using type = typename std::remove_reference<T>::type;
|
|
||||||
return std::is_arithmetic<type>::value;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename std::enable_if<serialized_lex_cast<T>(), size_t>::type
|
|
||||||
serialized(T&& t)
|
|
||||||
{
|
|
||||||
return lex_cast(t).size();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
|
||||||
typename std::enable_if<serialized_lex_cast<T>(), bool>::type
|
|
||||||
defined(T&& t)
|
|
||||||
{
|
|
||||||
return t != typename std::remove_reference<T>::type {0};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class... T>
|
template<class... T>
|
||||||
size_t
|
size_t
|
||||||
serialized(const tuple<T...> &t)
|
serialized(const tuple<T...> &t)
|
||||||
|
|
14
ircd/json.cc
14
ircd/json.cc
|
@ -1486,6 +1486,20 @@ ircd::json::operator==(const value &a, const value &b)
|
||||||
// json.h
|
// json.h
|
||||||
//
|
//
|
||||||
|
|
||||||
|
ircd::string_view
|
||||||
|
ircd::json::stringify(mutable_buffer &buf,
|
||||||
|
const string_view &v)
|
||||||
|
{
|
||||||
|
if(v.empty() && defined(v))
|
||||||
|
{
|
||||||
|
consume(buf, copy(buf, value::empty_string));
|
||||||
|
return value::empty_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
consume(buf, copy(buf, string_view{v}));
|
||||||
|
return string_view{v};
|
||||||
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
ircd::json::serialized(const string_view &s)
|
ircd::json::serialized(const string_view &s)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue