0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-10-01 21:28:53 +02:00

ircd::json::tuple: Minor cleanup.

This commit is contained in:
Jason Volk 2019-02-20 11:09:02 -08:00
parent 99058105b3
commit 2b2725f7c1

View file

@ -74,9 +74,12 @@ try
} }
catch(const bad_lex_cast &e) catch(const bad_lex_cast &e)
{ {
throw parse_error("cannot convert '%s' to '%s'", throw parse_error
demangle<src>(), {
demangle<dst>()); "cannot convert '%s' to '%s'",
demangle<src>(),
demangle<dst>()
};
} }
template<class dst, template<class dst,
@ -136,10 +139,13 @@ try
} }
catch(const std::exception &e) catch(const std::exception &e)
{ {
throw parse_error("failed to set member '%s' (from %s): %s", throw parse_error
key, {
demangle<V>(), "failed to set member '%s' (from %s): %s",
e.what()); key,
demangle<V>(),
e.what()
};
} }
template<class... T> template<class... T>
@ -152,25 +158,34 @@ set(tuple<T...> &t,
{ {
case type::STRING: case type::STRING:
case type::LITERAL: case type::LITERAL:
{
set(t, key, string_view{value}); set(t, key, string_view{value});
break; break;
}
case type::NUMBER: case type::NUMBER:
{
if(value.floats) if(value.floats)
set(t, key, value.floating); set(t, key, value.floating);
else else
set(t, key, value.integer); set(t, key, value.integer);
break; break;
}
case type::OBJECT: case type::OBJECT:
case type::ARRAY: case type::ARRAY:
{
if(unlikely(!value.serial)) if(unlikely(!value.serial))
throw print_error("Type %s must be JSON to be used by tuple member '%s'", throw print_error
reflect(type(value)), {
key); "Type %s must be JSON to be used by tuple member '%s'",
reflect(type(value)),
key
};
set(t, key, string_view{value}); set(t, key, string_view{value});
break; break;
}
} }
return t; return t;