diff --git a/include/ircd/m/id.h b/include/ircd/m/id.h index 70b90f690..bfc4e0fe0 100644 --- a/include/ircd/m/id.h +++ b/include/ircd/m/id.h @@ -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; template event(args&&... a) :m::id{EVENT, std::forward(a)...} {} - event() = default; }; struct ircd::m::id::user @@ -149,7 +150,6 @@ struct ircd::m::id::user { using buf = m::id::buf; template user(args&&... a) :m::id{USER, std::forward(a)...} {} - user() = default; }; struct ircd::m::id::room @@ -157,7 +157,6 @@ struct ircd::m::id::room { using buf = m::id::buf; template room(args&&... a) :m::id{ROOM, std::forward(a)...} {} - room() = default; }; struct ircd::m::id::alias @@ -165,5 +164,4 @@ struct ircd::m::id::alias { using buf = m::id::buf; template alias(args&&... a) :m::id{ALIAS, std::forward(a)...} {} - alias() = default; }; diff --git a/ircd/matrix.cc b/ircd/matrix.cc index 817d961d6..d1bccd9f1 100644 --- a/ircd/matrix.cc +++ b/ircd/matrix.cc @@ -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