aboutsummaryrefslogtreecommitdiff
path: root/src/modules/m_spanningtree/metadata.cpp
diff options
context:
space:
mode:
authorGravatar Sadie Powell2022-01-31 05:16:36 +0000
committerGravatar Sadie Powell2022-01-31 12:01:39 +0000
commit4cfc311591fb62c398b273ef2311a855c9fab3d9 (patch)
tree8f8cef41a093692c2dd7086b434ceea510789ab1 /src/modules/m_spanningtree/metadata.cpp
parentUse more appropriate types in module-specific extension types. (diff)
Slim down the protocol interface for sending metadata.
Diffstat (limited to 'src/modules/m_spanningtree/metadata.cpp')
-rw-r--r--src/modules/m_spanningtree/metadata.cpp48
1 files changed, 27 insertions, 21 deletions
diff --git a/src/modules/m_spanningtree/metadata.cpp b/src/modules/m_spanningtree/metadata.cpp
index 9a21076f9..2119fae3e 100644
--- a/src/modules/m_spanningtree/metadata.cpp
+++ b/src/modules/m_spanningtree/metadata.cpp
@@ -110,31 +110,37 @@ CmdResult CommandMetadata::Handle(User* srcuser, Params& params)
return CmdResult::SUCCESS;
}
-CommandMetadata::Builder::Builder(const User* user, const std::string& key, const std::string& val)
+CommandMetadata::Builder::Builder(const Extensible* ext, const std::string& key, const std::string& val)
: CmdBuilder("METADATA")
{
- push(user->uuid);
- push(key);
- push_last(val);
-}
+ switch (ext->extype)
+ {
+ case ExtensionType::CHANNEL:
+ {
+ const Channel* chan = static_cast<const Channel*>(ext);
+ push(chan->name);
+ push_int(chan->age);
+ break;
+ }
-CommandMetadata::Builder::Builder(const Channel* chan, const std::string& key, const std::string& val)
- : CmdBuilder("METADATA")
-{
- push(chan->name);
- push_int(chan->age);
- push(key);
- push_last(val);
-}
+ case ExtensionType::MEMBERSHIP:
+ {
+ const Membership* memb = static_cast<const Membership*>(ext);
+ push_raw("@");
+ push(memb->user->uuid);
+ push_raw(memb->chan->name);
+ push_int(memb->chan->age);
+ push_int(memb->id);
+ break;
+ }
-CommandMetadata::Builder::Builder(const Membership* memb, const std::string& key, const std::string& val)
- : CmdBuilder("METADATA")
-{
- push_raw("@");
- push(memb->user->uuid);
- push_raw(memb->chan->name);
- push_int(memb->chan->age);
- push_int(memb->id);
+ case ExtensionType::USER:
+ {
+ const User* user = static_cast<const User*>(ext);
+ push(user->uuid);
+ break;
+ }
+ }
push(key);
push_last(val);
}