29#include <seastar/core/chunked_fifo.hh>
30#include <seastar/core/do_with.hh>
31#include <seastar/core/iostream.hh>
32#include <seastar/core/loop.hh>
33#include <seastar/core/sstring.hh>
34#include <seastar/json/formatter.hh>
35#include <seastar/util/modules.hh>
41SEASTAR_MODULE_EXPORT_BEGIN
57 : _mandatory(false), _set(false) {
70 virtual ~json_base_element() =
default;
78 return !(_mandatory && !_set);
142 return formatter::to_json(_value);
146 return formatter::write(s, _value);
160template <
class T,
class Container>
170 _elements.push_back(element);
179 _elements.push_back(std::move(element));
184 return formatter::to_json(_elements);
194 for (
auto i : list) {
200 return formatter::write(s, _elements);
207using json_list = json_list_template<T, std::vector<T>>;
210using json_chunked_list = json_list_template<T, seastar::chunked_fifo<T>>;
279 bool mandatory =
false);
281 std::vector<json_base_element*> _elements;
323 _res = formatter::to_json(res);
330 _res = std::move(o._res);
331 _body_writer = std::move(o._body_writer);
348template<
typename Container,
typename Func>
349requires requires (Container c, Func aa,
output_stream<char> s) { { formatter::write(s, aa(*c.begin())) } -> std::same_as<future<>>; }
350std::function<future<>(output_stream<char>&&)> stream_range_as_array(Container val, Func fun) {
351 return [val = std::move(val), fun = std::move(fun)](output_stream<char>&& s)
mutable {
352 return do_with(output_stream<char>(std::move(s)), Container(std::move(val)), Func(std::move(fun)),
true, [](output_stream<char>& s,
const Container& val,
const Func& f,
bool& first){
353 return s.write(
"[").then([&val, &s, &first, &f] () {
354 return do_for_each(val, [&s, &first, &f](
const typename Container::value_type& v){
355 auto fut = first ? make_ready_future<>() : s.write(
", ");
357 return fut.then([&s, &f, &v]() {
358 return formatter::write(s, f(v));
377std::function<future<>(output_stream<char>&&)> stream_object(T val) {
378 return [val = std::move(val)](output_stream<char>&& s)
mutable {
379 return do_with(output_stream<char>(std::move(s)), T(std::move(val)), [](output_stream<char>& s, T& val){
380 return formatter::write(s, std::move(val)).finally([&s] {
387SEASTAR_MODULE_EXPORT_END
A representation of a possibly not-yet-computed value.
Definition: future.hh:1197
Definition: json_elements.hh:51
json_base_element() noexcept
Definition: json_elements.hh:56
virtual bool is_verify() noexcept
Definition: json_elements.hh:77
virtual std::string to_string()=0
Definition: json_elements.hh:101
json_element & operator=(const C &new_value)
Definition: json_elements.hh:122
const T & operator()() const noexcept
Definition: json_elements.hh:131
json_element & operator=(const T &new_value)
Definition: json_elements.hh:110
virtual std::string to_string() override
Definition: json_elements.hh:140
Definition: json_elements.hh:161
virtual std::string to_string() override
Definition: json_elements.hh:182
json_list_template & operator=(const C &list)
Definition: json_elements.hh:192
void push(const T &element)
Definition: json_elements.hh:168
void push(T &&element)
Definition: json_elements.hh:177
Definition: json_elements.hh:212
virtual future write(output_stream< char > &s) const
write an object to the output stream
Definition: json_elements.hh:230
virtual std::string to_json() const =0
future close() noexcept
Definition: iostream-impl.hh:497
future do_for_each(Iterator begin, Sentinel end, AsyncAction action) noexcept
Call a function for each item in a range, sequentially (iterator version).
Definition: loop.hh:466
auto do_with(T1 &&rv1, T2 &&rv2, More &&... more) noexcept
Definition: do_with.hh:135
Seastar API namespace.
Definition: abort_on_ebadf.hh:26
Definition: json_elements.hh:245
virtual bool is_verify() const
virtual future write(output_stream< char > &) const
write to an output stream
virtual std::string to_json() const
virtual void add(json_base_element *element, std::string name, bool mandatory=false)
Definition: json_elements.hh:316
Definition: json_elements.hh:290
virtual future write(output_stream< char > &s) const
write to an output stream
Definition: json_elements.hh:298
virtual std::string to_json() const
Definition: json_elements.hh:291