mirror of
https://github.com/matrix-construct/construct
synced 2024-12-26 15:33:54 +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];
|
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:
|
public:
|
||||||
template<class... args> error(const http::code &, const string_view &errcode, const string_view &fmt, args&&...);
|
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&&...);
|
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(const http::code &);
|
||||||
error(std::string);
|
error(std::string);
|
||||||
error();
|
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
|
/// 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 &errcode,
|
||||||
const string_view &fmt,
|
const string_view &fmt,
|
||||||
args&&... a)
|
args&&... a)
|
||||||
:http::error
|
:error
|
||||||
{
|
{
|
||||||
status, [&errcode, &fmt, &a...]() -> json::strung
|
internal, status, [&errcode, &fmt, &a...]() -> json::strung
|
||||||
{
|
{
|
||||||
const string_view str
|
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
|
// m/error.h
|
||||||
//
|
//
|
||||||
|
|
||||||
|
namespace ircd::m
|
||||||
|
{
|
||||||
|
const std::array<http::header, 1> _error_headers
|
||||||
|
{{
|
||||||
|
{ "Content-Type", "application/json; charset=utf-8" },
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
thread_local
|
thread_local
|
||||||
decltype(ircd::m::error::fmtbuf)
|
decltype(ircd::m::error::fmtbuf)
|
||||||
ircd::m::error::fmtbuf
|
ircd::m::error::fmtbuf
|
||||||
{};
|
{};
|
||||||
|
|
||||||
ircd::m::error::error()
|
ircd::m::error::error()
|
||||||
:http::error{http::INTERNAL_SERVER_ERROR}
|
:http::error
|
||||||
|
{
|
||||||
|
http::INTERNAL_SERVER_ERROR
|
||||||
|
}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ircd::m::error::error(std::string c)
|
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)
|
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,
|
ircd::m::error::error(const http::code &c,
|
||||||
const json::members &members)
|
const json::members &members)
|
||||||
:http::error{c, json::strung{members}}
|
:error
|
||||||
|
{
|
||||||
|
internal, c, json::strung{members}
|
||||||
|
}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ircd::m::error::error(const http::code &c,
|
ircd::m::error::error(const http::code &c,
|
||||||
const json::iov &iov)
|
const json::iov &iov)
|
||||||
:http::error{c, json::strung{iov}}
|
:error
|
||||||
|
{
|
||||||
|
internal, c, json::strung{iov}
|
||||||
|
}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
ircd::m::error::error(const http::code &c,
|
ircd::m::error::error(const http::code &c,
|
||||||
const json::object &object)
|
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