From 6e1e3ca53d6ce2cee2ee5e2fad209dec7b3c5948 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 30 Sep 2023 16:21:06 +0100 Subject: Update to new Slicer interface --- icespider/core/ihttpRequest.cpp | 2 +- icespider/core/ihttpRequest.h | 6 ++++-- icespider/core/xwwwFormUrlEncoded.cpp | 33 ++++++++++++++++++++++----------- icespider/core/xwwwFormUrlEncoded.h | 11 +++++------ icespider/xslt/xsltStreamSerializer.cpp | 2 +- icespider/xslt/xsltStreamSerializer.h | 2 +- 6 files changed, 34 insertions(+), 22 deletions(-) diff --git a/icespider/core/ihttpRequest.cpp b/icespider/core/ihttpRequest.cpp index 682640f..205fa6e 100644 --- a/icespider/core/ihttpRequest.cpp +++ b/icespider/core/ihttpRequest.cpp @@ -180,7 +180,7 @@ namespace IceSpider { } void - IHttpRequest::modelPartResponse(const IRouteHandler * route, const Slicer::ModelPartForRootPtr & mp) const + IHttpRequest::modelPartResponse(const IRouteHandler * route, const Slicer::ModelPartForRootParam mp) const { auto s = getSerializer(route); setHeader(H::CONTENT_TYPE, MimeTypeFmt::get(s.first.group, s.first.type)); diff --git a/icespider/core/ihttpRequest.h b/icespider/core/ihttpRequest.h index 2b4ac02..9d95069 100644 --- a/icespider/core/ihttpRequest.h +++ b/icespider/core/ihttpRequest.h @@ -148,10 +148,12 @@ namespace IceSpider { void response(const IRouteHandler * route, const T & t) const { - modelPartResponse(route, Slicer::ModelPart::CreateRootFor(t)); + Slicer::ModelPart::OnRootFor(t, [this, route](Slicer::ModelPartForRootParam root) { + modelPartResponse(route, root); + }); } - void modelPartResponse(const IRouteHandler * route, const Slicer::ModelPartForRootPtr &) const; + void modelPartResponse(const IRouteHandler * route, const Slicer::ModelPartForRootParam) const; const Core * core; }; diff --git a/icespider/core/xwwwFormUrlEncoded.cpp b/icespider/core/xwwwFormUrlEncoded.cpp index fb8f7ad..3cb0ece 100644 --- a/icespider/core/xwwwFormUrlEncoded.cpp +++ b/icespider/core/xwwwFormUrlEncoded.cpp @@ -131,7 +131,7 @@ namespace IceSpider { } void - XWwwFormUrlEncoded::Deserialize(Slicer::ModelPartForRootPtr mp) + XWwwFormUrlEncoded::Deserialize(Slicer::ModelPartForRootParam mp) { mp->Create(); mp->OnEachChild([this](auto, auto mp, auto) { @@ -302,7 +302,7 @@ namespace IceSpider { } void - XWwwFormUrlEncoded::DeserializeSimple(const Slicer::ModelPartPtr & mp) + XWwwFormUrlEncoded::DeserializeSimple(const Slicer::ModelPartParam mp) { iterateVars([mp](auto &&, const auto && v) { mp->SetValue(SetFromString(std::forward(v))); @@ -310,25 +310,36 @@ namespace IceSpider { } void - XWwwFormUrlEncoded::DeserializeComplex(const Slicer::ModelPartPtr & mp) + XWwwFormUrlEncoded::DeserializeComplex(const Slicer::ModelPartParam mp) { mp->Create(); iterateVars([mp](auto && k, const auto && v) { - if (auto m = mp->GetChild(k)) { - m->SetValue(SetFromString(std::forward(v))); - } + mp->OnChild( + [&v](Slicer::ModelPartParam m, const Slicer::Metadata &) { + m->SetValue(SetFromString(std::forward(v))); + }, + k); }); mp->Complete(); } void - XWwwFormUrlEncoded::DeserializeDictionary(const Slicer::ModelPartPtr & mp) + XWwwFormUrlEncoded::DeserializeDictionary(const Slicer::ModelPartParam mp) { iterateVars([mp](auto && k, const auto && v) { - auto p = mp->GetAnonChild(); - p->GetChild(KEY)->SetValue(SetFromString(std::forward(k))); - p->GetChild(VALUE)->SetValue(SetFromString(std::forward(v))); - p->Complete(); + mp->OnAnonChild([&k, &v](Slicer::ModelPartParam p, const Slicer::Metadata &) { + p->OnChild( + [&k](Slicer::ModelPartParam kp, const Slicer::Metadata &) { + kp->SetValue(SetFromString(std::forward(k))); + }, + KEY); + p->OnChild( + [&v](Slicer::ModelPartParam vp, const Slicer::Metadata &) { + vp->SetValue(SetFromString(std::forward(v))); + }, + VALUE); + p->Complete(); + }); }); } } diff --git a/icespider/core/xwwwFormUrlEncoded.h b/icespider/core/xwwwFormUrlEncoded.h index ba9f8d0..89cf9bc 100644 --- a/icespider/core/xwwwFormUrlEncoded.h +++ b/icespider/core/xwwwFormUrlEncoded.h @@ -19,9 +19,8 @@ namespace IceSpider { explicit XWwwFormUrlEncoded(std::istream & in); - void Deserialize(Slicer::ModelPartForRootPtr mp) override; - DLL_PUBLIC static void iterateVars( - const std::string_view input, const KVh & h, const std::string_view split); + void Deserialize(Slicer::ModelPartForRootParam mp) override; + DLL_PUBLIC static void iterateVars(const std::string_view input, const KVh & h, const std::string_view split); DLL_PUBLIC static MaybeString urldecode(std::string_view::const_iterator s, std::string_view::const_iterator); DLL_PUBLIC static std::string urlencode(std::string_view::const_iterator s, std::string_view::const_iterator); @@ -35,9 +34,9 @@ namespace IceSpider { void iterateVars(const KVh & h); - void DeserializeSimple(const Slicer::ModelPartPtr & mp); - void DeserializeComplex(const Slicer::ModelPartPtr & mp); - void DeserializeDictionary(const Slicer::ModelPartPtr & mp); + void DeserializeSimple(const Slicer::ModelPartParam mp); + void DeserializeComplex(const Slicer::ModelPartParam mp); + void DeserializeDictionary(const Slicer::ModelPartParam mp); const std::string input; }; diff --git a/icespider/xslt/xsltStreamSerializer.cpp b/icespider/xslt/xsltStreamSerializer.cpp index 6fbe8ed..c89e89c 100644 --- a/icespider/xslt/xsltStreamSerializer.cpp +++ b/icespider/xslt/xsltStreamSerializer.cpp @@ -55,7 +55,7 @@ namespace IceSpider { XsltStreamSerializer::XsltStreamSerializer(std::ostream & os, xsltStylesheet * ss) : strm(os), stylesheet(ss) { } void - XsltStreamSerializer::Serialize(Slicer::ModelPartForRootPtr mp) + XsltStreamSerializer::Serialize(Slicer::ModelPartForRootParam mp) { Slicer::XmlDocumentSerializer::Serialize(mp); const auto result = std::unique_ptr { diff --git a/icespider/xslt/xsltStreamSerializer.h b/icespider/xslt/xsltStreamSerializer.h index 785aa14..3dda157 100644 --- a/icespider/xslt/xsltStreamSerializer.h +++ b/icespider/xslt/xsltStreamSerializer.h @@ -27,7 +27,7 @@ namespace IceSpider { XsltStreamSerializer(std::ostream &, xsltStylesheet *); - void Serialize(Slicer::ModelPartForRootPtr mp) override; + void Serialize(Slicer::ModelPartForRootParam mp) override; protected: std::ostream & strm; -- cgit v1.2.3