summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--icespider/core/ihttpRequest.cpp2
-rw-r--r--icespider/core/ihttpRequest.h6
-rw-r--r--icespider/core/xwwwFormUrlEncoded.cpp33
-rw-r--r--icespider/core/xwwwFormUrlEncoded.h11
-rw-r--r--icespider/xslt/xsltStreamSerializer.cpp2
-rw-r--r--icespider/xslt/xsltStreamSerializer.h2
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<decltype(v)>(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<decltype(v)>(v)));
- }
+ mp->OnChild(
+ [&v](Slicer::ModelPartParam m, const Slicer::Metadata &) {
+ m->SetValue(SetFromString(std::forward<decltype(v)>(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<decltype(k)>(k)));
- p->GetChild(VALUE)->SetValue(SetFromString(std::forward<decltype(v)>(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<decltype(k)>(k)));
+ },
+ KEY);
+ p->OnChild(
+ [&v](Slicer::ModelPartParam vp, const Slicer::Metadata &) {
+ vp->SetValue(SetFromString(std::forward<decltype(v)>(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<xmlDoc, decltype(&xmlFreeDoc)> {
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;