mirror of
https://github.com/matrix-construct/construct
synced 2024-09-26 18:38:52 +02:00
ircd::json: Massage away json::value template ctor.
This commit is contained in:
parent
063644feaa
commit
0bf053197c
4 changed files with 9 additions and 66 deletions
|
@ -85,9 +85,11 @@ struct ircd::json::value
|
||||||
explicit operator int64_t() const;
|
explicit operator int64_t() const;
|
||||||
explicit operator std::string() const; ///< NOTE full stringify() of value
|
explicit operator std::string() const; ///< NOTE full stringify() of value
|
||||||
|
|
||||||
template<class T> explicit value(const T &specialized);
|
|
||||||
value(const string_view &sv, const enum type &);
|
value(const string_view &sv, const enum type &);
|
||||||
template<size_t N> value(const char (&)[N]);
|
template<size_t N> value(const char (&)[N]);
|
||||||
|
explicit value(const int64_t &);
|
||||||
|
explicit value(const double &);
|
||||||
|
explicit value(const bool &);
|
||||||
value(const char *const &s);
|
value(const char *const &s);
|
||||||
value(const string_view &sv);
|
value(const string_view &sv);
|
||||||
value(const struct member *const &, const size_t &len);
|
value(const struct member *const &, const size_t &len);
|
||||||
|
@ -117,20 +119,6 @@ struct ircd::json::value
|
||||||
friend std::ostream &operator<<(std::ostream &, const value &);
|
friend std::ostream &operator<<(std::ostream &, const value &);
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace ircd::json
|
|
||||||
{
|
|
||||||
template<> value::value(const double &floating);
|
|
||||||
template<> value::value(const uint64_t &integer);
|
|
||||||
template<> value::value(const int64_t &integer);
|
|
||||||
template<> value::value(const float &floating);
|
|
||||||
template<> value::value(const uint32_t &integer);
|
|
||||||
template<> value::value(const int32_t &integer);
|
|
||||||
template<> value::value(const uint16_t &integer);
|
|
||||||
template<> value::value(const int16_t &integer);
|
|
||||||
template<> value::value(const bool &boolean);
|
|
||||||
template<> value::value(const std::string &str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static_assert(sizeof(ircd::json::value) == 16, "");
|
static_assert(sizeof(ircd::json::value) == 16, "");
|
||||||
|
|
||||||
inline
|
inline
|
||||||
|
@ -174,24 +162,11 @@ ircd::json::value::value(const char (&str)[N])
|
||||||
,floats{false}
|
,floats{false}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const std::string &str)
|
|
||||||
:value{string_view{str}}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
ircd::json::value::value(const string_view &sv)
|
ircd::json::value::value(const string_view &sv)
|
||||||
:value{sv, json::type(sv, std::nothrow)}
|
:value{sv, json::type(sv, std::nothrow)}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
ircd::json::value::value(const T &t)
|
|
||||||
:value{static_cast<string_view>(t)}
|
|
||||||
{
|
|
||||||
static_assert(std::is_base_of<ircd::string_view, T>() ||
|
|
||||||
std::is_convertible<ircd::string_view, T>(), "");
|
|
||||||
}
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
ircd::json::value::value(const nullptr_t &)
|
ircd::json::value::value(const nullptr_t &)
|
||||||
:value
|
:value
|
||||||
|
@ -199,7 +174,7 @@ ircd::json::value::value(const nullptr_t &)
|
||||||
literal_null, type::LITERAL
|
literal_null, type::LITERAL
|
||||||
}{}
|
}{}
|
||||||
|
|
||||||
template<> inline
|
inline
|
||||||
ircd::json::value::value(const bool &boolean)
|
ircd::json::value::value(const bool &boolean)
|
||||||
:value
|
:value
|
||||||
{
|
{
|
||||||
|
@ -255,7 +230,7 @@ ircd::json::value::value(std::unique_ptr<const struct member[]> object,
|
||||||
object.release();
|
object.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> inline
|
inline
|
||||||
ircd::json::value::value(const int64_t &integer)
|
ircd::json::value::value(const int64_t &integer)
|
||||||
:integer{integer}
|
:integer{integer}
|
||||||
,len{0}
|
,len{0}
|
||||||
|
@ -265,7 +240,7 @@ ircd::json::value::value(const int64_t &integer)
|
||||||
,floats{false}
|
,floats{false}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<> inline
|
inline
|
||||||
ircd::json::value::value(const double &floating)
|
ircd::json::value::value(const double &floating)
|
||||||
:floating{floating}
|
:floating{floating}
|
||||||
,len{0}
|
,len{0}
|
||||||
|
@ -275,38 +250,6 @@ ircd::json::value::value(const double &floating)
|
||||||
,floats{true}
|
,floats{true}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
template<>
|
|
||||||
__attribute__((warning("uint64_t narrows to int64_t when used in json::value")))
|
|
||||||
inline
|
|
||||||
ircd::json::value::value(const uint64_t &integer)
|
|
||||||
:value{int64_t(integer)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const float &floating)
|
|
||||||
:value{double(floating)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const int32_t &integer)
|
|
||||||
:value{int64_t(integer)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const uint32_t &integer)
|
|
||||||
:value{int64_t(integer)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const int16_t &integer)
|
|
||||||
:value{int64_t(integer)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
template<> inline
|
|
||||||
ircd::json::value::value(const uint16_t &integer)
|
|
||||||
:value{int64_t(integer)}
|
|
||||||
{}
|
|
||||||
|
|
||||||
inline
|
inline
|
||||||
ircd::json::value::value(value &&other)
|
ircd::json::value::value(value &&other)
|
||||||
noexcept
|
noexcept
|
||||||
|
|
|
@ -178,7 +178,7 @@ ircd::m::init_listener(const json::object &conf,
|
||||||
{
|
{
|
||||||
{ "name", name },
|
{ "name", name },
|
||||||
{ "host", host },
|
{ "host", host },
|
||||||
{ "port", opts.get("port", 8448) },
|
{ "port", opts.get("port", 8448L) },
|
||||||
{ "ssl_certificate_file_pem", conf["tls_certificate_path"] },
|
{ "ssl_certificate_file_pem", conf["tls_certificate_path"] },
|
||||||
{ "ssl_private_key_file_pem", conf["tls_private_key_path"] },
|
{ "ssl_private_key_file_pem", conf["tls_private_key_path"] },
|
||||||
{ "ssl_tmp_dh_file", conf["tls_dh_params_path"] },
|
{ "ssl_tmp_dh_file", conf["tls_dh_params_path"] },
|
||||||
|
|
|
@ -56,7 +56,7 @@ ircd::m::create(const id::room &room_id,
|
||||||
|
|
||||||
json::iov::set _set[]
|
json::iov::set _set[]
|
||||||
{
|
{
|
||||||
{ event, { "depth", 1 }},
|
{ event, { "depth", 0L }},
|
||||||
{ event, { "type", "m.room.create" }},
|
{ event, { "type", "m.room.create" }},
|
||||||
{ event, { "state_key", "" }},
|
{ event, { "state_key", "" }},
|
||||||
};
|
};
|
||||||
|
|
|
@ -107,7 +107,7 @@ void foop()
|
||||||
std::cout <<
|
std::cout <<
|
||||||
test(json::strung(json::members
|
test(json::strung(json::members
|
||||||
{
|
{
|
||||||
{ "one", 1 },
|
{ "one", 1L },
|
||||||
{ "two", "Two" }
|
{ "two", "Two" }
|
||||||
}))
|
}))
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
|
|
Loading…
Reference in a new issue