mirror of
https://github.com/matrix-construct/construct
synced 2024-12-25 23:14:13 +01:00
ircd:Ⓜ️:error: Improve constructions; ensure json content-type.
This commit is contained in:
parent
af37529470
commit
6e71c05586
2 changed files with 52 additions and 13 deletions
|
@ -33,6 +33,15 @@ class ircd::m::error
|
|||
{
|
||||
static thread_local char fmtbuf[4_KiB];
|
||||
|
||||
IRCD_OVERLOAD(internal)
|
||||
error(internal_t, const http::code &, const json::strung &object);
|
||||
|
||||
protected:
|
||||
IRCD_OVERLOAD(child)
|
||||
template<class... args> error(child_t, args&&... a)
|
||||
:error{std::forward<args>(a)...}
|
||||
{}
|
||||
|
||||
public:
|
||||
template<class... args> error(const http::code &, const string_view &errcode, const string_view &fmt, args&&...);
|
||||
template<class... args> error(const string_view &errcode, const string_view &fmt, args&&...);
|
||||
|
@ -42,11 +51,6 @@ class ircd::m::error
|
|||
error(const http::code &);
|
||||
error(std::string);
|
||||
error();
|
||||
|
||||
IRCD_OVERLOAD(child)
|
||||
template<class... args> error(child_t, args&&... a)
|
||||
:error{std::forward<args>(a)...}
|
||||
{}
|
||||
};
|
||||
|
||||
/// Macro for all matrix exceptions; all errors rooted from m::error
|
||||
|
@ -112,9 +116,9 @@ ircd::m::error::error(const http::code &status,
|
|||
const string_view &errcode,
|
||||
const string_view &fmt,
|
||||
args&&... a)
|
||||
:http::error
|
||||
:error
|
||||
{
|
||||
status, [&errcode, &fmt, &a...]() -> json::strung
|
||||
internal, status, [&errcode, &fmt, &a...]() -> json::strung
|
||||
{
|
||||
const string_view str
|
||||
{
|
||||
|
|
47
ircd/m/m.cc
47
ircd/m/m.cc
|
@ -3727,34 +3727,69 @@ ircd::m::_hook_match(const m::event &matching,
|
|||
// m/error.h
|
||||
//
|
||||
|
||||
namespace ircd::m
|
||||
{
|
||||
const std::array<http::header, 1> _error_headers
|
||||
{{
|
||||
{ "Content-Type", "application/json; charset=utf-8" },
|
||||
}};
|
||||
}
|
||||
|
||||
thread_local
|
||||
decltype(ircd::m::error::fmtbuf)
|
||||
ircd::m::error::fmtbuf
|
||||
{};
|
||||
|
||||
ircd::m::error::error()
|
||||
:http::error{http::INTERNAL_SERVER_ERROR}
|
||||
:http::error
|
||||
{
|
||||
http::INTERNAL_SERVER_ERROR
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(std::string c)
|
||||
:http::error{http::INTERNAL_SERVER_ERROR, std::move(c)}
|
||||
:http::error
|
||||
{
|
||||
http::INTERNAL_SERVER_ERROR, std::move(c)
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(const http::code &c)
|
||||
:http::error{c, std::string{}}
|
||||
:http::error
|
||||
{
|
||||
c, std::string{}
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(const http::code &c,
|
||||
const json::members &members)
|
||||
:http::error{c, json::strung{members}}
|
||||
:error
|
||||
{
|
||||
internal, c, json::strung{members}
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(const http::code &c,
|
||||
const json::iov &iov)
|
||||
:http::error{c, json::strung{iov}}
|
||||
:error
|
||||
{
|
||||
internal, c, json::strung{iov}
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(const http::code &c,
|
||||
const json::object &object)
|
||||
:http::error{c, std::string{object}}
|
||||
:http::error
|
||||
{
|
||||
c, std::string{object}, vector_view<const http::header>{_error_headers}
|
||||
}
|
||||
{}
|
||||
|
||||
ircd::m::error::error(internal_t,
|
||||
const http::code &c,
|
||||
const json::strung &object)
|
||||
:http::error
|
||||
{
|
||||
c, object, vector_view<const http::header>{_error_headers}
|
||||
}
|
||||
{}
|
||||
|
|
Loading…
Reference in a new issue