103 explicit object_writer(
sink out)
noexcept RELOCO_RETURN_TYPESTATE(unconsumed) : out_(std::move(out)) {
107 ~object_writer()
noexcept {
114 object_writer(
const object_writer &) =
delete;
115 object_writer &operator=(
const object_writer &) =
delete;
116 object_writer(object_writer &&other)
noexcept RELOCO_RETURN_TYPESTATE(unconsumed)
117 : out_(std::move(other.out_)), first_(other.first_), closed_(other.closed_) {
118 other.closed_ =
true;
122 object_writer &as_known() &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed",
"unknown")
123 RELOCO_RETURN_TYPESTATE(unconsumed) {
124 RELOCO_ASSERT(!closed_,
"Attempt to reuse consumed state");
129 object_writer &key(microfmt::string_view k) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
136 object_writer &kv(microfmt::string_view k, microfmt::string_view val) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
142 object_writer &kv(microfmt::string_view k,
const char *val) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
144 if (val ==
nullptr) {
152 template <std::
size_t N>
153 object_writer &kv(microfmt::string_view k,
const char (&val)[N]) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
154 return kv(k, microfmt::string_view(val, N - 1));
157 object_writer &kv(microfmt::string_view k,
bool val) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
159 out_.write(val ?
"true" :
"false");
163 object_writer &kv(microfmt::string_view k, std::nullptr_t) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
169 template <
typename T,
170 typename std::enable_if<std::is_integral<T>::value && !std::is_same<T, bool>::value,
int>::type = 0>
171 object_writer &kv(microfmt::string_view k, T val) &
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed") {
173 detail::write_integer(out_, val);
178 [[nodiscard]] object_writer nested_object(microfmt::string_view k)
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed")
179 RELOCO_RETURN_TYPESTATE(unconsumed) {
181 return object_writer(out_);
185 [[nodiscard]] array_writer nested_array(microfmt::string_view k)
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed")
186 RELOCO_RETURN_TYPESTATE(unconsumed);
188 void end()
noexcept RELOCO_CALLABLE_WHEN(
"unconsumed",
"consumed") RELOCO_SET_TYPESTATE(consumed) {
196 void prefix()
noexcept {