userver: userver/storages/postgres/io/boost_multiprecision.hpp Source File
Loading...
Searching...
No Matches
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