7#ifndef BOOST_REDIS_RESP3_SERIALIZATION_HPP
8#define BOOST_REDIS_RESP3_SERIALIZATION_HPP
10#include <boost/redis/resp3/parser.hpp>
11#include <boost/redis/resp3/type.hpp>
13#include <boost/system/system_error.hpp>
14#include <boost/throw_exception.hpp>
22namespace boost::redis::resp3 {
45template <class T, typename = typename std::enable_if<std::is_integral<T>::value>
::type>
46void boost_redis_to_bulk(std::string& payload, T n)
48 auto const s = std::to_string(n);
49 boost::redis::resp3::boost_redis_to_bulk(payload, std::string_view{s});
54 static void add(std::string& payload, T
const& from)
56 using namespace boost::redis::resp3;
57 boost_redis_to_bulk(payload, from);
62struct add_bulk_impl<std::tuple<Ts...>> {
63 static void add(std::string& payload, std::tuple<Ts...>
const& t)
65 auto f = [&](
auto const&... vs) {
66 using namespace boost::redis::resp3;
67 (boost_redis_to_bulk(payload, vs), ...);
74template <
class U,
class V>
75struct add_bulk_impl<std::pair<U, V>> {
76 static void add(std::string& payload, std::pair<U, V>
const& from)
78 using namespace boost::redis::resp3;
79 boost_redis_to_bulk(payload, from.first);
80 boost_redis_to_bulk(payload, from.second);
84void add_header(std::string& payload,
type t, std::size_t size);
87void add_bulk(std::string& payload, T
const& data)
89 add_bulk_impl<T>::add(payload, data);
97 static constexpr auto size = 1U;
100template <
class T,
class U>
101struct bulk_counter<std::pair<T, U>> {
102 static constexpr auto size = 2U;
105void add_blob(std::string& payload, std::string_view blob);
106void add_separator(std::string& payload);
110template <
class Adapter>
111void deserialize(std::string_view
const& data, Adapter adapter, system::error_code& ec)
114 while (!parser.done()) {
115 auto const res = parser.consume(data, ec);
119 BOOST_ASSERT(res.has_value());
121 adapter(res.value(), ec);
126 BOOST_ASSERT(parser.get_consumed() == std::size(data));
129template <
class Adapter>
130void deserialize(std::string_view
const& data, Adapter adapter)
132 system::error_code ec;
133 deserialize(data, adapter, ec);
136 BOOST_THROW_EXCEPTION(system::system_error{ec});
void boost_redis_to_bulk(std::string &payload, std::string_view data)
Adds a bulk to the request.