userver: userver/storages/postgres/io/buffer_io_base.hpp Source File
Loading...
Searching...
No Matches
buffer_io_base.hpp
1#pragma once
2
3#include <userver/storages/postgres/io/type_mapping.hpp>
4
5USERVER_NAMESPACE_BEGIN
6
7namespace storages::postgres::io::detail {
8
9template <typename T>
10inline constexpr bool kShouldInitMapping = requires { T::init; };
11
12template <typename T>
13struct BufferParserBase {
14 using ValueType = T;
15
16 ValueType& value;
17 explicit BufferParserBase(ValueType& v)
18 : value{v}
19 {
20 using PgMapping = CppToPg<ValueType>;
21 if constexpr (kShouldInitMapping<PgMapping>) {
22 ForceReference(PgMapping::init);
23 }
24 }
25};
26
27template <typename T>
28struct BufferParserBase<T&&> {
29 using ValueType = T;
30
31 ValueType value;
32 explicit BufferParserBase(ValueType&& v)
33 : value{std::move(v)}
34 {
35 using PgMapping = CppToPg<ValueType>;
36 if constexpr (kShouldInitMapping<PgMapping>) {
37 ForceReference(PgMapping::init);
38 }
39 }
40};
41
42template <typename T>
43struct BufferFormatterBase {
44 using ValueType = T;
45 const ValueType& value;
46 explicit BufferFormatterBase(const ValueType& v)
47 : value{v}
48 {}
49};
50
51} // namespace storages::postgres::io::detail
52
53USERVER_NAMESPACE_END