diff options
Diffstat (limited to 'icespider/fcgi/xwwwFormUrlEncoded.h')
-rw-r--r-- | icespider/fcgi/xwwwFormUrlEncoded.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/icespider/fcgi/xwwwFormUrlEncoded.h b/icespider/fcgi/xwwwFormUrlEncoded.h new file mode 100644 index 0000000..fe6aa00 --- /dev/null +++ b/icespider/fcgi/xwwwFormUrlEncoded.h @@ -0,0 +1,34 @@ +#ifndef ICESPIDER_CGI_XWWWFORMURLENCODED_H +#define ICESPIDER_CGI_XWWWFORMURLENCODED_H + +#include <slicer/serializer.h> +#include <boost/algorithm/string/split.hpp> + +namespace IceSpider { + class XWwwFormUrlEncoded : public Slicer::Deserializer { + public: + typedef boost::function<void(const std::string &, const std::string &)> KVh; + + XWwwFormUrlEncoded(std::istream & in); + + void Deserialize(Slicer::ModelPartForRootPtr mp) override; + static inline void iterateVars(const std::string & input, const KVh & h); + + private: + + static inline void iterateVars(const KVh & h, boost::algorithm::split_iterator<std::string::const_iterator> pi); + static std::string urldecode(std::string::const_iterator s, std::string::const_iterator); + + void iterateVars(const KVh & h); + + void DeserializeSimple(Slicer::ModelPartPtr mp); + void DeserializeComplex(Slicer::ModelPartPtr mp); + void DeserializeDictionary(Slicer::ModelPartPtr mp); + + const std::string input; + }; + +}; + +#endif + |