12#include <userver/formats/bson/document.hpp> 
   13#include <userver/formats/bson/iterator.hpp> 
   14#include <userver/formats/bson/types.hpp> 
   15#include <userver/formats/bson/value.hpp> 
   16#include <userver/formats/common/meta.hpp> 
   17#include <userver/formats/common/transfer_tag.hpp> 
   18#include <userver/formats/common/type.hpp> 
   19#include <userver/utils/strong_typedef.hpp> 
   21USERVER_NAMESPACE_BEGIN
 
   23namespace formats::
bson {
 
   57  explicit ValueBuilder(impl::ValueImplPtr);
 
   72  ValueBuilder(
Value&&);
 
   79   ValueBuilder(std::nullptr_t);
 
   82   ValueBuilder(
unsigned int);
 
   84   ValueBuilder(
unsigned long);
 
   85   ValueBuilder(
long long);
 
   86   ValueBuilder(
unsigned long long);
 
   88   ValueBuilder(
const char*);
 
   90   ValueBuilder(std::string);
 
   91   ValueBuilder(std::string_view);
 
   92   ValueBuilder(
const std::chrono::system_clock::time_point&);
 
   93   ValueBuilder(
const Oid&);
 
  102  template <
typename T>
 
  124      const utils::StrongTypedef<Tag, std::string, Ops>& name);
 
  200  void Assign(
const impl::ValueImplPtr&);
 
  201  void Assign(impl::ValueImplPtr&&);
 
  203  template <
typename T>
 
  204  static Value DoSerialize(
const T& t);
 
  206  impl::ValueImplPtr impl_;
 
  211    const utils::StrongTypedef<Tag, std::string, Ops>& name) {
 
  212  return (*
this)[name.GetUnderlying()];
 
  219      "There is no `Serialize(const T&, formats::serialize::To<bson::Value>)` " 
  220      "in namespace of `T` or `formats::serialize`. " 
  222      "Probably you forgot to include the " 
  223      "<userver/formats/serialize/common_containers.hpp> or you " 
  224      "have not provided a `Serialize` function overload.");
 
  226  return Serialize(t, formats::serialize::To<Value>());