blob: 6c266b64767aaf3a2a9dfeed6de7fd37e1fb2489 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#ifndef ICESPIDER_CGI_XWWWFORMURLENCODED_H
#define ICESPIDER_CGI_XWWWFORMURLENCODED_H
#include <boost/algorithm/string/split.hpp>
#include <maybeString.h>
#include <slicer/serializer.h>
#include <visibility.h>
namespace IceSpider {
class XWwwFormUrlEncoded : public Slicer::Deserializer {
public:
using KVh = std::function<void(MaybeString &&, MaybeString &&)>;
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);
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);
DLL_PUBLIC static void urlencodeto(
std::ostream &, std::string_view::const_iterator s, std::string_view::const_iterator);
DLL_PUBLIC static std::string urlencode(const std::string_view & s);
private:
static inline void iterateVars(
const KVh & h, boost::algorithm::split_iterator<std::string_view::const_iterator> pi);
void iterateVars(const KVh & h);
void DeserializeSimple(const Slicer::ModelPartPtr & mp);
void DeserializeComplex(const Slicer::ModelPartPtr & mp);
void DeserializeDictionary(const Slicer::ModelPartPtr & mp);
const std::string input;
};
};
#endif
|