OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
util/serialization/util.hpp
Go to the documentation of this file.
1// Copyright (c) 2021 MIT Digital Currency Initiative,
2// Federal Reserve Bank of Boston
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef OPENCBDC_TX_SRC_SERIALIZATION_UTIL_H_
7#define OPENCBDC_TX_SRC_SERIALIZATION_UTIL_H_
8
10#include "size_serializer.hpp"
11
12#include <memory>
13
14namespace cbdc {
20 template<typename T>
21 auto serialized_size(const T& obj) -> size_t {
22 auto ser = size_serializer();
23 ser << obj;
24 return ser.size();
25 }
26
32 template<typename T, typename B = buffer>
33 auto make_buffer(const T& obj)
34 -> std::enable_if_t<std::is_same_v<B, buffer>, cbdc::buffer> {
35 auto sz = serialized_size(obj);
36 auto pkt = cbdc::buffer();
37 pkt.extend(sz);
38 auto ser = cbdc::buffer_serializer(pkt);
39 ser << obj;
40 return pkt;
41 }
42
47 template<typename T>
48 auto make_shared_buffer(const T& obj) -> std::shared_ptr<cbdc::buffer> {
49 auto sz = serialized_size(obj);
50 auto buf = std::make_shared<cbdc::buffer>();
51 buf->extend(sz);
52 auto ser = cbdc::buffer_serializer(*buf);
53 ser << obj;
54 return buf;
55 }
56
62 template<typename T>
63 auto from_buffer(cbdc::buffer& buf) -> std::optional<T> {
64 auto deser = cbdc::buffer_serializer(buf);
65 T ret{};
66 if(!(deser >> ret)) {
67 return std::nullopt;
68 }
69 return ret;
70 }
71}
72
73#endif // OPENCBDC_TX_SRC_SERIALIZATION_UTIL_H_
Serializer implementation for buffer.
Buffer to store and retrieve byte data.
Definition buffer.hpp:15
Utility class for determining the size of a buffer needed to serialize a sequence of objects.
auto from_buffer(nuraft::buffer &buf) -> std::optional< T >
Deserialize object of given type from a nuraft::buffer.
auto serialized_size(const T &obj) -> size_t
Calculates the serialized size in bytes of the given object when serialized using serializer.
@ buffer
A singular RLP value (byte array)
auto make_shared_buffer(const T &obj) -> std::shared_ptr< cbdc::buffer >
Serialize object into std::shared_ptr<cbdc::buffer> using a cbdc::buffer_serializer.
auto make_buffer(const T &obj) -> std::enable_if_t< std::is_same_v< B, nuraft::ptr< nuraft::buffer > >, nuraft::ptr< nuraft::buffer > >
Serialize object into nuraft::buffer using a cbdc::nuraft_serializer.