25#ifndef MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_FRAME_H_
26#define MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_FRAME_H_
31#include <system_error>
48 template <
class Accumulator>
64 static constexpr size_t max_size() noexcept {
return 4; }
70 auto payload_size_res = accu.template step<wire::FixedInt<3>>();
71 auto seq_id_res = accu.template step<wire::FixedInt<1>>();
75 return std::make_pair(
77 value_type(payload_size_res->value(), seq_id_res->value()));
88class Codec<frame::CompressedHeader>
90 template <
class Accumulator>
113 auto payload_size_res = accu.template step<wire::FixedInt<3>>();
114 auto seq_id_res = accu.template step<wire::FixedInt<1>>();
115 auto uncompressed_size_res = accu.template step<wire::FixedInt<3>>();
119 return std::make_pair(
121 value_type(payload_size_res->value(), seq_id_res->value(),
122 uncompressed_size_res->value()));
137template <
class PayloadType>
138class Codec<frame::Frame<PayloadType>>
140 template <
class Accumulator>
145 .step(PayloadType(v_.payload()))
162 auto header_res = accu.template step<frame::Header>();
168 if (
buffer.
size() < header_size + header_res->payload_size()) {
174 accu.template step<PayloadType>(header_res->payload_size());
178 return std::make_pair(
180 value_type(header_res->seq_id(), payload_res.value()));
constexpr Codec(value_type v, capabilities::value_type caps)
Definition: classic_protocol_codec_frame.h:155
friend __base
Definition: classic_protocol_codec_frame.h:153
const value_type v_
Definition: classic_protocol_codec_frame.h:184
static stdx::expected< std::pair< size_t, value_type >, std::error_code > decode(net::const_buffer buffer, capabilities::value_type caps)
Definition: classic_protocol_codec_frame.h:158
constexpr auto accumulate_fields(Accumulator &&accu) const
Definition: classic_protocol_codec_frame.h:141
Codec for a type.
Definition: classic_protocol_codec_base.h:71
Definition: classic_protocol_wire.h:102
Definition: classic_protocol_frame.h:84
Generator of decoded Types of a buffer.
Definition: classic_protocol_codec_base.h:152
result_type result() const
get result of the step().
Definition: classic_protocol_codec_base.h:218
CRTP base for the Codec's encode part.
Definition: classic_protocol_codec_base.h:374
size_t size() const noexcept
Definition: buffer.h:119
constexpr const value_type & value() const &
Definition: expected.h:687
constexpr const error_type & error() const &
Definition: expected.h:736
Definition: expected.h:943
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:72
Definition: classic_protocol_binary.h:38
std::error_code make_error_code(codec_errc e) noexcept
Definition: classic_protocol_codec_error.h:85
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:417
Definition: varlen_sort.h:174
constexpr auto make_unexpected(E &&e) -> unexpected< std::decay_t< E > >
Definition: expected.h:124