0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-09-28 19:58:53 +02:00

ircd:Ⓜ️ Improve id construction / validation related.

This commit is contained in:
Jason Volk 2017-10-03 04:07:10 -07:00
parent 3cfa32cb0b
commit 5073096335
2 changed files with 21 additions and 9 deletions

View file

@ -61,6 +61,7 @@ struct ircd::m::id
// Checks
bool valid() const; // Fully qualified mxid
bool valid_local() const; // Local part is valid (may or may not have host)
void validate() const; // valid() | throws
// Extract elements
string_view local() const { return split(*this, ':').first; }
@ -74,12 +75,13 @@ struct ircd::m::id
public:
IRCD_USING_OVERLOAD(generate, m::generate);
id() = default;
id(const string_view &id);
id(const enum sigil &, const string_view &id);
id(const enum sigil &, char *const &buf, const size_t &max, const string_view &id);
id(const enum sigil &, char *const &buf, const size_t &max, const string_view &name, const string_view &host);
id(const enum sigil &, char *const &buf, const size_t &max, const generate_t &, const string_view &host);
id(const enum sigil &, char *const &buf, const size_t &max, const string_view &name, const string_view &host);
id(const enum sigil &, char *const &buf, const size_t &max, const string_view &id);
id(const enum sigil &, const string_view &id);
id(const enum sigil &);
id(const string_view &id);
id() = default;
};
namespace ircd::m
@ -141,7 +143,6 @@ struct ircd::m::id::event
{
using buf = m::id::buf<event>;
template<class... args> event(args&&... a) :m::id{EVENT, std::forward<args>(a)...} {}
event() = default;
};
struct ircd::m::id::user
@ -149,7 +150,6 @@ struct ircd::m::id::user
{
using buf = m::id::buf<user>;
template<class... args> user(args&&... a) :m::id{USER, std::forward<args>(a)...} {}
user() = default;
};
struct ircd::m::id::room
@ -157,7 +157,6 @@ struct ircd::m::id::room
{
using buf = m::id::buf<room>;
template<class... args> room(args&&... a) :m::id{ROOM, std::forward<args>(a)...} {}
room() = default;
};
struct ircd::m::id::alias
@ -165,5 +164,4 @@ struct ircd::m::id::alias
{
using buf = m::id::buf<alias>;
template<class... args> alias(args&&... a) :m::id{ALIAS, std::forward<args>(a)...} {}
alias() = default;
};

View file

@ -1366,6 +1366,12 @@ ircd::m::id::id(const string_view &id)
{
}
ircd::m::id::id(const enum sigil &sigil)
:string_view{}
,sigil{sigil}
{
}
ircd::m::id::id(const enum sigil &sigil,
const string_view &id)
:string_view{id}
@ -1475,6 +1481,14 @@ ircd::m::id::id(const enum sigil &sigil,
{
}
void
ircd::m::id::validate()
const
{
if(!valid())
throw INVALID_MXID("Not a valid '%s' mxid", reflect(sigil));
}
bool
ircd::m::id::valid()
const