userver: userver/storages/postgres/io/boost_multiprecision.hpp Source File
⚠️ This is the documentation for an old userver version. Click here to switch to the latest version.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
boost_multiprecision.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file userver/storages/postgres/io/boost_multiprecision.hpp
4/// @brief boost::multiprecision I/O support
5/// @ingroup userver_postgres_parse_and_format
6
7#include <userver/storages/postgres/io/buffer_io.hpp>
8#include <userver/storages/postgres/io/buffer_io_base.hpp>
9#include <userver/storages/postgres/io/numeric_data.hpp>
10#include <userver/storages/postgres/io/type_mapping.hpp>
11
12#include <boost/multiprecision/cpp_dec_float.hpp>
13
14USERVER_NAMESPACE_BEGIN
15
16namespace storages::postgres {
17
18template <unsigned Precision = 50>
21
22namespace io {
23
24template <unsigned Precision>
27 const Value& value;
28
29 BufferFormatter(const Value& val) : value{val} {}
30
31 template <typename Buffer>
32 void operator()(const UserTypes&, Buffer& buf) const {
38 }
39};
40
41template <unsigned Precision>
45 using BaseType::BaseType;
47
48 void operator()(const FieldBuffer& buffer) {
50 // cpp_dec_float provides const char* constructor, where it parses the
51 // contents to internal buffers. no std::string constructor is provided.
52 this->value = NumberType{str.c_str()};
53 }
54};
55
56template <unsigned Precision>
59
60} // namespace io
61} // namespace storages::postgres
62
63USERVER_NAMESPACE_END