11#include <userver/compiler/select.hpp>
12#include <userver/formats/bson/types.hpp>
13#include <userver/formats/bson/value.hpp>
14#include <userver/formats/bson/value_builder.hpp>
15#include <userver/utils/fast_pimpl.hpp>
17USERVER_NAMESPACE_BEGIN
19namespace formats::
bson::impl {
26 explicit BsonBuilder(
const ValueImpl&);
29 BsonBuilder(
const BsonBuilder&);
30 BsonBuilder(BsonBuilder&&)
noexcept;
31 BsonBuilder& operator=(
const BsonBuilder&);
32 BsonBuilder& operator=(BsonBuilder&&)
noexcept;
34 BsonBuilder& Append(std::string_view key, std::nullptr_t);
35 BsonBuilder& Append(std::string_view key,
bool);
36 BsonBuilder& Append(std::string_view key,
int);
37 BsonBuilder& Append(std::string_view key,
unsigned int);
38 BsonBuilder& Append(std::string_view key,
long);
39 BsonBuilder& Append(std::string_view key,
unsigned long);
40 BsonBuilder& Append(std::string_view key,
long long);
41 BsonBuilder& Append(std::string_view key,
unsigned long long);
42 BsonBuilder& Append(std::string_view key,
double);
43 BsonBuilder& Append(std::string_view key,
const char*);
44 BsonBuilder& Append(std::string_view key, std::string_view);
46 template <
typename Duration>
47 BsonBuilder& Append(std::string_view key, std::chrono::time_point<std::chrono::system_clock, Duration> value) {
48 return Append(key, std::chrono::time_point_cast<std::chrono::milliseconds>(value));
51 Append(std::string_view key, std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>);
53 BsonBuilder& Append(std::string_view key,
const Oid&);
54 BsonBuilder& Append(std::string_view key,
const Binary&);
55 BsonBuilder& Append(std::string_view key,
const Decimal128&);
56 BsonBuilder& Append(std::string_view key,
MinKey);
57 BsonBuilder& Append(std::string_view key,
MaxKey);
58 BsonBuilder& Append(std::string_view key,
const Timestamp&);
60 BsonBuilder& Append(std::string_view key,
const Value&);
62 BsonBuilder& Append(std::string_view key,
const bson_t*);
66 !std::is_integral_v<T> &&
67 !std::is_convertible_v<T, std::string_view> &&
68 !std::is_convertible_v<T,
Value>,
70 Append(std::string_view key,
const T& val) {
74 const bson_t* Get()
const;
80 void AppendInto(bson_t*, std::string_view key,
const ValueImpl&);
82 static constexpr std::size_t kSize = compiler::SelectSize()
85 static constexpr std::size_t kAlignment =
alignof(
void*);
86 utils::FastPimpl<MutableBson, kSize, kAlignment, utils::kStrictMatch> bson_;