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/operserv/os_news.cpp | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) (limited to 'modules/operserv/os_news.cpp') diff --git a/modules/operserv/os_news.cpp b/modules/operserv/os_news.cpp index 031e6f5d5..e5b6b057c 100644 --- a/modules/operserv/os_news.cpp +++ b/modules/operserv/os_news.cpp @@ -64,18 +64,24 @@ struct NewsMessages msgarray[] = { } }; -struct MyNewsItem final - : NewsItem +struct NewsItemType final + : Serialize::Type { - void Serialize(Serialize::Data &data) const override + NewsItemType() + : Serialize::Type("NewsItem") { - data.Store("type", this->type); - data.Store("text", this->text); - data.Store("who", this->who); - data.Store("time", this->time); } - static Serializable *Unserialize(Serializable *obj, Serialize::Data &data) + void Serialize(const Serializable *obj, Serialize::Data &data) const override + { + const auto *ni = static_cast(obj); + data.Store("type", ni->type); + data.Store("text", ni->text); + data.Store("who", ni->who); + data.Store("time", ni->time); + } + + Serializable *Unserialize(Serializable *obj, Serialize::Data &data) const override { if (!news_service) return NULL; @@ -84,7 +90,7 @@ struct MyNewsItem final if (obj) ni = anope_dynamic_static_cast(obj); else - ni = new MyNewsItem(); + ni = new NewsItem(); unsigned int t; data["type"] >> t; @@ -117,7 +123,7 @@ public: NewsItem *CreateNewsItem() override { - return new MyNewsItem(); + return new NewsItem(); } void AddNewsItem(NewsItem *n) override @@ -200,7 +206,7 @@ protected: if (Anope::ReadOnly) source.Reply(READ_ONLY_MODE); - NewsItem *news = new MyNewsItem(); + NewsItem *news = new NewsItem(); news->type = ntype; news->text = text; news->time = Anope::CurTime; @@ -382,7 +388,7 @@ class OSNews final : public Module { MyNewsService newsservice; - Serialize::Type newsitem_type; + NewsItemType newsitem_type; CommandOSLogonNews commandoslogonnews; CommandOSOperNews commandosopernews; @@ -442,9 +448,12 @@ class OSNews final } public: - OSNews(const Anope::string &modname, const Anope::string &creator) : Module(modname, creator, VENDOR), - newsservice(this), newsitem_type("NewsItem", MyNewsItem::Unserialize), - commandoslogonnews(this), commandosopernews(this), commandosrandomnews(this) + OSNews(const Anope::string &modname, const Anope::string &creator) + : Module(modname, creator, VENDOR) + , newsservice(this) + , commandoslogonnews(this) + , commandosopernews(this) + , commandosrandomnews(this) { } -- cgit