OpenCBDC Transaction Processor
Loading...
Searching...
No Matches
util/raft/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_RAFT_UTIL_H_
7#define OPENCBDC_TX_SRC_RAFT_UTIL_H_
8
9#include "serialization.hpp"
11
12namespace cbdc {
19 template<typename T, typename B>
20 auto make_buffer(const T& obj)
21 -> std::enable_if_t<std::is_same_v<B, nuraft::ptr<nuraft::buffer>>,
22 nuraft::ptr<nuraft::buffer>> {
23 auto pkt = nuraft::buffer::alloc(cbdc::serialized_size(obj));
24 auto ser = cbdc::nuraft_serializer(*pkt);
25 ser << obj;
26 return pkt;
27 }
28
34 template<typename T>
35 auto from_buffer(nuraft::buffer& buf) -> std::optional<T> {
36 auto deser = cbdc::nuraft_serializer(buf);
37 T ret{};
38 if(!(deser >> ret)) {
39 return std::nullopt;
40 }
41 return ret;
42 }
43}
44
45#endif
Implements serializer for nuraft::buffer.
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.
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.