7#include <userver/storages/postgres/exceptions.hpp>
8#include <userver/storages/postgres/io/buffer_io.hpp>
9#include <userver/storages/postgres/io/buffer_io_base.hpp>
10#include <userver/utils/macaddr.hpp>
12USERVER_NAMESPACE_BEGIN
16using Macaddr = USERVER_NAMESPACE::
utils::Macaddr;
17using Macaddr8 = USERVER_NAMESPACE::
utils::Macaddr8;
23struct MacaddrFormatterBase : BufferFormatterBase<T> {
24 using BaseType = BufferFormatterBase<T>;
26 using BaseType::BaseType;
28 template <
typename Buffer>
29 void operator()(
const UserTypes& types, Buffer& buffer) {
30 for (
const auto val :
this->value.GetOctets()) {
31 io::WriteBuffer(types, buffer,
static_cast<
char>(val));
37struct MacaddrBufferParser : BufferParserBase<T> {
38 using BaseType = BufferParserBase<T>;
39 using BaseType::BaseType;
41 typename T::OctetsType octets;
44 if (buffer.length < octets.size()) {
46 fmt::format(
"Buffer size {} is too small for a MAC address of {} bytes", buffer.length, octets.size())
49 const uint8_t* byte_cptr = buffer.buffer;
50 for (
auto& val : octets) {
54 this->value = T(octets);
62struct BufferFormatter<Macaddr> : detail::MacaddrFormatterBase<Macaddr> {
63 using BaseType = detail::MacaddrFormatterBase<Macaddr>;
65 using BaseType::BaseType;
70struct BufferFormatter<Macaddr8> : detail::MacaddrFormatterBase<Macaddr8> {
71 using BaseType = detail::MacaddrFormatterBase<Macaddr8>;
73 using BaseType::BaseType;
78struct BufferParser<Macaddr> : detail::MacaddrBufferParser<Macaddr> {
79 using BaseType = detail::MacaddrBufferParser<Macaddr>;
81 using BaseType::BaseType;
86struct BufferParser<Macaddr8> : detail::MacaddrBufferParser<Macaddr8> {
87 using BaseType = detail::MacaddrBufferParser<Macaddr8>;
89 using BaseType::BaseType;