AnCH Framework 0.1
Another C++ Hack Framework
Loading...
Searching...
No Matches
mapperRegistry.hpp
1/*
2 ANCH Framework: ANother C++ Hack is a C++ framework based on C++11 standard
3 Copyright (C) 2020 Vincent Lachenal
4
5 This file is part of ANCH Framework.
6
7 ANCH Framework is free software: you can redistribute it and/or modify
8 it under the terms of the GNU Lesser General Public License as published by
9 the Free Software Foundation, either version 3 of the License, or
10 (at your option) any later version.
11
12 ANCH Framework is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU Lesser General Public License for more details.
16
17 You should have received a copy of the GNU Lesser General Public License
18 along with ANCH Framework. If not, see <http://www.gnu.org/licenses/>.
19*/
20#pragma once
21
22#include <map>
23#include <string>
24#include <istream>
25#include <ostream>
26#include <optional>
27#include <any>
28
29#include "singleton.hpp"
30
31
32namespace anch::rest {
33
40 auto& castMapper(const std::string& contentType, std::any& mapper);
41
50
51 // Attributes +
52 private:
54 std::map<std::string, std::any> _mappers;
55 // Attributes -
56
57 // Constructors +
58 public:
63 // Constructors -
64
65 // Destructor +
66 public:
71 // Destructor -
72
73 // Methods +
74 public:
83 template<typename T>
84 void registerMapper(const std::string& contentType, const T& mapper);
85
95 template<typename T>
96 void serialize(const std::string& contentType, T value, std::ostream& out);
97
107 template<typename T>
108 void deserialize(const std::string& contentType, T& value, std::istream& input);
109
119 template<typename T>
120 std::optional<T> mapper(const std::string& contentType);
121 // Methods -
122
123 };
124
132 class GlobalMapperRegistry: public MapperRegistry, public anch::Singleton<GlobalMapperRegistry> {
134
135 private:
139 GlobalMapperRegistry();
140
144 virtual ~GlobalMapperRegistry();
145
146 };
147
148} // anch::rest
149
150#include "rest/impl/mapperRegistry.hpp"
Meyers' singleton implementation.
Definition singleton.hpp:34
void deserialize(const std::string &contentType, T &value, std::istream &input)
void registerMapper(const std::string &contentType, const T &mapper)
void serialize(const std::string &contentType, T value, std::ostream &out)