nlohmann_msgpack.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_msgpack 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_msgpack::serializer::to_buffer] Empty data."};
73 
74  core::type::buffer buf = nlohmann::json::to_msgpack(data);
75  return buf;
76  }
77 
78  private:
79 
80  // data storage
81  std::vector< nlohmann::json > data;
82 
83 
84  friend class nlohmann_msgpack;
85  serializer() = default;
86 
87  serializer(serializer const &) = delete;
88  serializer& operator = (serializer const &) = delete;
89 
90  template <typename T>
91  void pack_value(T const &value)
92  {
93  data.push_back(value);
94  }
95 
96  };
97 
98  class deserializer final
99  {
100  public:
101  deserializer(deserializer &&) noexcept = default;
102  deserializer& operator = (deserializer &&) noexcept = default;
103  ~deserializer() noexcept = default;
104 
106  {
107  nlohmann::from_json(nlohmann::json::from_msgpack(buffer), data);
108  }
109 
110  template <typename T>
112  {
113  assert(data.size() > 0 && "Empty stream.");
114  if (data.empty())
115  throw core::exception::packer{"[nanorpc::packer::nlohmann_msgpack::deserializer] Empty stream."};
116 
117  unpack_value(value);
118  return std::move(*this);
119  }
120 
121 
122  private:
123 
124  // data storage
125  std::vector< nlohmann::json > data;
126 
127  friend class nlohmann_msgpack;
128 
129  deserializer(deserializer const &) = delete;
130  deserializer& operator = (deserializer const &) = delete;
131 
132 
133  template <typename T>
134  void unpack_value(T &value)
135  {
136  nlohmann::from_json(data.front(), value);
137  data.erase(data.begin());
138  }
139 
140  };
141 
142 };
143 
144 } // namespace packer
145 } // namespace nanorpc
nanorpc::packer::nlohmann_msgpack::deserializer::deserializer
deserializer(core::type::buffer buffer)
Definition: nlohmann_msgpack.h:105
nanorpc
Definition: client.h:30
nanorpc::packer::nlohmann_msgpack::serializer::serializer
serializer()=default
nanorpc::packer::nlohmann_msgpack::deserializer::unpack_value
void unpack_value(T &value)
Definition: nlohmann_msgpack.h:134
nanorpc::packer::nlohmann_msgpack::deserializer::deserializer
deserializer(deserializer &&) noexcept=default
nanorpc::packer::nlohmann_msgpack::serializer::pack_value
void pack_value(T const &value)
Definition: nlohmann_msgpack.h:91
nanorpc::packer::nlohmann_msgpack::serializer::~serializer
~serializer() noexcept=default
nanorpc::packer::nlohmann_msgpack::serializer::pack
serializer pack(T const &value)
Definition: nlohmann_msgpack.h:62
type.h
nanorpc::packer::nlohmann_msgpack::deserializer::~deserializer
~deserializer() noexcept=default
nanorpc::core::type::buffer
std::vector< std::uint8_t > buffer
Definition: type.h:28
nanorpc::packer::nlohmann_msgpack::deserializer
Definition: nlohmann_msgpack.h:98
nanorpc::packer::nlohmann_msgpack::deserializer::unpack
deserializer unpack(T &value)
Definition: nlohmann_msgpack.h:111
nanorpc::packer::nlohmann_msgpack::from_buffer
deserializer from_buffer(core::type::buffer buffer)
Definition: nlohmann_msgpack.h:48
nanorpc::packer::nlohmann_msgpack::serializer
Definition: nlohmann_msgpack.h:54
nanorpc::packer::nlohmann_msgpack::deserializer::operator=
deserializer & operator=(deserializer &&) noexcept=default
nanorpc::packer::nlohmann_msgpack::serializer::operator=
serializer & operator=(serializer &&) noexcept=default
nanorpc::packer::nlohmann_msgpack::deserializer::data
std::vector< nlohmann::json > data
Definition: nlohmann_msgpack.h:125
config.h
nanorpc::packer::nlohmann_msgpack
Definition: nlohmann_msgpack.h:32
nanorpc::packer::nlohmann_msgpack::pack
serializer pack(T const &value)
Definition: nlohmann_msgpack.h:43
exception.h
nanorpc::packer::nlohmann_msgpack::serializer::to_buffer
core::type::buffer to_buffer()
Definition: nlohmann_msgpack.h:68
nanorpc::packer::nlohmann_msgpack::serializer::data
std::vector< nlohmann::json > data
Definition: nlohmann_msgpack.h:81
dai::utility::buf
const typedef std::vector< std::uint8_t > buf
Definition: H26xParsers.cpp:40


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