nlohmann_json.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 // STD
5 #include <cassert>
6 #include <cstdint>
7 #include <iomanip>
8 #include <istream>
9 #include <iterator>
10 #include <memory>
11 #include <ostream>
12 #include <stdexcept>
13 #include <string>
14 #include <tuple>
15 #include <type_traits>
16 #include <utility>
17 #include <vector>
18 
19 // NANORPC
21 #include "nanorpc/core/exception.h"
22 #include "nanorpc/core/type.h"
23 
24 // nlohmann
25 #include "nlohmann/json.hpp"
26 
27 namespace nanorpc
28 {
29 namespace packer
30 {
31 
32 class nlohmann_json final
33 {
34 private:
35  class serializer;
36  class deserializer;
37 
38 public:
41 
42  template <typename T>
43  serializer pack(T const &value)
44  {
45  return serializer{}.pack(value);
46  }
47 
49  {
50  return deserializer{std::move(buffer)};
51  }
52 
53 private:
54  class serializer final
55  {
56  public:
57  serializer(serializer &&) noexcept = default;
58  serializer& operator = (serializer &&) noexcept = default;
59  ~serializer() noexcept = default;
60 
61  template <typename T>
62  serializer pack(T const &value)
63  {
64  pack_value(value);
65  return std::move(*this);
66  }
67 
69  {
70  assert(data.size() > 0 && "Empty stream.");
71  if (data.empty())
72  throw core::exception::packer{"[nanorpc::packer::nlohmann_json::serializer::to_buffer] Empty data."};
73 
74  //core::type::buffer buf = nlohmann::json::to_msgpack(data);
75  nlohmann::json j = data;
76  auto str = j.dump();
77  core::type::buffer buf(str.begin(), str.end());
78 
79  return buf;
80  }
81 
82  private:
83 
84  // data storage
85  std::vector< nlohmann::json > data;
86 
87  friend class nlohmann_json;
88  serializer() = default;
89 
90  serializer(serializer const &) = delete;
91  serializer& operator = (serializer const &) = delete;
92 
93  template <typename T>
94  void pack_value(T const &value)
95  {
96  data.push_back(value);
97  }
98 
99  };
100 
101  class deserializer final
102  {
103  public:
104  deserializer(deserializer &&) noexcept = default;
105  deserializer& operator = (deserializer &&) noexcept = default;
106  ~deserializer() noexcept = default;
107 
109  {
110  nlohmann::from_json(nlohmann::json::parse(buffer), data);
111  }
112 
113  template <typename T>
115  {
116  assert(data.size() > 0 && "Empty stream.");
117  if (data.empty())
118  throw core::exception::packer{"[nanorpc::packer::nlohmann_json::deserializer] Empty stream."};
119 
120  unpack_value(value);
121  return std::move(*this);
122  }
123 
124  private:
125 
126  // data storage
127  std::vector< nlohmann::json > data;
128 
129  friend class nlohmann_json;
130 
131  deserializer(deserializer const &) = delete;
132  deserializer& operator = (deserializer const &) = delete;
133 
134  template <typename T>
135  void unpack_value(T &value)
136  {
137  nlohmann::from_json(data.front(), value);
138  data.erase(data.begin());
139  }
140 
141  };
142 
143 };
144 
145 } // namespace packer
146 } // namespace nanorpc
nanorpc
Definition: client.h:30
nanorpc::packer::nlohmann_json::deserializer::deserializer
deserializer(core::type::buffer buffer)
Definition: nlohmann_json.h:108
nanorpc::packer::nlohmann_json::deserializer::~deserializer
~deserializer() noexcept=default
nanorpc::packer::nlohmann_json::deserializer::deserializer
deserializer(deserializer &&) noexcept=default
nanorpc::packer::nlohmann_json::serializer::to_buffer
core::type::buffer to_buffer()
Definition: nlohmann_json.h:68
nanorpc::packer::nlohmann_json::deserializer::unpack
deserializer unpack(T &value)
Definition: nlohmann_json.h:114
nanorpc::packer::nlohmann_json::deserializer::operator=
deserializer & operator=(deserializer &&) noexcept=default
type.h
nanorpc::packer::nlohmann_json::serializer::~serializer
~serializer() noexcept=default
nanorpc::core::type::buffer
std::vector< std::uint8_t > buffer
Definition: type.h:28
nanorpc::packer::nlohmann_json::serializer
Definition: nlohmann_json.h:54
nanorpc::packer::nlohmann_json::deserializer::data
std::vector< nlohmann::json > data
Definition: nlohmann_json.h:127
nanorpc::packer::nlohmann_json
Definition: nlohmann_json.h:32
nanorpc::packer::nlohmann_json::serializer::operator=
serializer & operator=(serializer &&) noexcept=default
nanorpc::packer::nlohmann_json::from_buffer
deserializer from_buffer(core::type::buffer buffer)
Definition: nlohmann_json.h:48
nanorpc::packer::nlohmann_json::serializer::data
std::vector< nlohmann::json > data
Definition: nlohmann_json.h:85
nanorpc::packer::nlohmann_json::serializer::pack
serializer pack(T const &value)
Definition: nlohmann_json.h:62
config.h
nanorpc::packer::nlohmann_json::serializer::serializer
serializer()=default
exception.h
nanorpc::packer::nlohmann_json::pack
serializer pack(T const &value)
Definition: nlohmann_json.h:43
nanorpc::packer::nlohmann_json::deserializer::unpack_value
void unpack_value(T &value)
Definition: nlohmann_json.h:135
nanorpc::packer::nlohmann_json::serializer::pack_value
void pack_value(T const &value)
Definition: nlohmann_json.h:94
dai::utility::buf
const typedef std::vector< std::uint8_t > buf
Definition: H26xParsers.cpp:40
nanorpc::packer::nlohmann_json::deserializer
Definition: nlohmann_json.h:101


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19