diff --git a/include/ircd/m/id.h b/include/ircd/m/id.h index 104b8a3c2..cf2ab6793 100644 --- a/include/ircd/m/id.h +++ b/include/ircd/m/id.h @@ -161,6 +161,8 @@ struct ircd::m::id::event using closure = std::function; using closure_bool = std::function; + string_view version() const; // static view + template event(args&&... a) :m::id{EVENT, std::forward(a)...} diff --git a/ircd/m_id.cc b/ircd/m_id.cc index c42a9eae9..5f8f27f21 100644 --- a/ircd/m_id.cc +++ b/ircd/m_id.cc @@ -648,6 +648,38 @@ const return ret; } +// +// id::event +// + +ircd::string_view +ircd::m::id::event::version() +const +{ + static const parser::rule<> &is_v4 + { + parser.event_id_v4 + }; + + static const parser::rule<> &is_v3 + { + parser.event_id_v3 + }; + + const auto &local(this->local()); + auto *start(std::begin(local)); + auto *const stop(std::end(local)); + + return + qi::parse(start, stop, is_v4)? "4": + qi::parse(start, stop, is_v3)? "3": + "1"; +} + +// +// util +// + bool ircd::m::my(const id &id) {