From cdcf0e2f9a8fb0e1c363fc65f71f3131fc6c5ea5 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Wed, 12 Mar 2025 10:29:11 +0000 Subject: Move serialization from Serializable to a Serialize::Type child. --- modules/nickserv/ns_ajoin.cpp | 33 +++++++++++++++++++++------------ modules/nickserv/ns_set_misc.cpp | 28 ++++++++++++++++++++-------- modules/nickserv/ns_suspend.cpp | 34 +++++++++++++++++++++++----------- 3 files changed, 64 insertions(+), 31 deletions(-) (limited to 'modules/nickserv') diff --git a/modules/nickserv/ns_ajoin.cpp b/modules/nickserv/ns_ajoin.cpp index a169022b1..d60e30f07 100644 --- a/modules/nickserv/ns_ajoin.cpp +++ b/modules/nickserv/ns_ajoin.cpp @@ -39,18 +39,28 @@ struct AJoinEntry final (*channels)->erase(it); } } +}; - void Serialize(Serialize::Data &data) const override +struct AJoinEntryType final + : public Serialize::Type +{ + AJoinEntryType() + : Serialize::Type("AJoinEntry") { - if (!this->owner) + } + + void Serialize(const Serializable *obj, Serialize::Data &data) const override + { + const auto *aj = static_cast(obj); + if (!aj->owner) return; - data.Store("owner", this->owner->display); - data.Store("channel", this->channel); - data.Store("key", this->key); + data.Store("owner", aj->owner->display); + data.Store("channel", aj->channel); + data.Store("key", aj->key); } - static Serializable *Unserialize(Serializable *obj, Serialize::Data &sd) + Serializable *Unserialize(Serializable *obj, Serialize::Data &sd) const override { Anope::string sowner; @@ -305,17 +315,16 @@ class NSAJoin final { CommandNSAJoin commandnsajoin; ExtensibleItem ajoinlist; - Serialize::Type ajoinentry_type; + AJoinEntryType ajoinentry_type; public: - NSAJoin(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), - commandnsajoin(this), ajoinlist(this, "ajoinlist"), - ajoinentry_type("AJoinEntry", AJoinEntry::Unserialize) + NSAJoin(const Anope::string &modname, const Anope::string &creator) + : Module(modname, creator, VENDOR) + , commandnsajoin(this) + , ajoinlist(this, "ajoinlist") { - if (!IRCD || !IRCD->CanSVSJoin) throw ModuleException("Your IRCd does not support SVSJOIN"); - } void OnUserLogin(User *u) override diff --git a/modules/nickserv/ns_set_misc.cpp b/modules/nickserv/ns_set_misc.cpp index 90d463fff..c7606cf85 100644 --- a/modules/nickserv/ns_set_misc.cpp +++ b/modules/nickserv/ns_set_misc.cpp @@ -43,15 +43,25 @@ struct NSMiscData final name = n; data = d; } +}; + +struct NSMiscDataType final + : Serialize::Type +{ + NSMiscDataType() + : Serialize::Type("NSMiscData") + { + } - void Serialize(Serialize::Data &sdata) const override + void Serialize(const Serializable *obj, Serialize::Data &sdata) const override { - sdata.Store("nc", this->object); - sdata.Store("name", this->name); - sdata.Store("data", this->data); + const auto *d = static_cast(obj); + sdata.Store("nc", d->object); + sdata.Store("name", d->name); + sdata.Store("data", d->data); } - static Serializable *Unserialize(Serializable *obj, Serialize::Data &data) + Serializable *Unserialize(Serializable *obj, Serialize::Data &data) const override { Anope::string snc, sname, sdata; @@ -185,11 +195,13 @@ class NSSetMisc final { CommandNSSetMisc commandnssetmisc; CommandNSSASetMisc commandnssasetmisc; - Serialize::Type nsmiscdata_type; + NSMiscDataType nsmiscdata_type; public: - NSSetMisc(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), - commandnssetmisc(this), commandnssasetmisc(this), nsmiscdata_type("NSMiscData", NSMiscData::Unserialize) + NSSetMisc(const Anope::string &modname, const Anope::string &creator) + : Module(modname, creator, VENDOR) + , commandnssetmisc(this) + , commandnssasetmisc(this) { me = this; } diff --git a/modules/nickserv/ns_suspend.cpp b/modules/nickserv/ns_suspend.cpp index 950528e50..04af0797d 100644 --- a/modules/nickserv/ns_suspend.cpp +++ b/modules/nickserv/ns_suspend.cpp @@ -19,17 +19,27 @@ struct NSSuspendInfo final , Serializable { NSSuspendInfo(Extensible *) : Serializable("NSSuspendInfo") { } +}; + +struct NSSuspendInfoType final + : Serialize::Type +{ + NSSuspendInfoType() + : Serialize::Type("NSSuspendInfo") + { + } - void Serialize(Serialize::Data &data) const override + void Serialize(const Serializable *obj, Serialize::Data &data) const override { - data.Store("nick", what); - data.Store("by", by); - data.Store("reason", reason); - data.Store("time", when); - data.Store("expires", expires); + const auto *si = static_cast(obj); + data.Store("nick", si->what); + data.Store("by", si->by); + data.Store("reason", si->reason); + data.Store("time", si->when); + data.Store("expires", si->expires); } - static Serializable *Unserialize(Serializable *obj, Serialize::Data &data) + Serializable *Unserialize(Serializable *obj, Serialize::Data &data) const override { Anope::string snick; data["nick"] >> snick; @@ -211,7 +221,7 @@ class NSSuspend final CommandNSSuspend commandnssuspend; CommandNSUnSuspend commandnsunsuspend; ExtensibleItem suspend; - Serialize::Type suspend_type; + NSSuspendInfoType suspend_type; std::vector show; struct trim final @@ -234,9 +244,11 @@ class NSSuspend final } public: - NSSuspend(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), - commandnssuspend(this), commandnsunsuspend(this), suspend(this, "NS_SUSPENDED"), - suspend_type("NSSuspendInfo", NSSuspendInfo::Unserialize) + NSSuspend(const Anope::string &modname, const Anope::string &creator) + : Module(modname, creator, VENDOR) + , commandnssuspend(this) + , commandnsunsuspend(this) + , suspend(this, "NS_SUSPENDED") { } -- cgit