9#ifndef ZYPP_CORE_PARSER_JSON_JSON_VALUE_DEFINED
10#define ZYPP_CORE_PARSER_JSON_JSON_VALUE_DEFINED
43 template <
class Iterator>
56 Array( std::initializer_list<Value> contents_r );
62 void add(
const std::initializer_list<Value> & contents_r );
73 std::ostream &
dumpOn( std::ostream &
str )
const;
102 using iterator = std::multimap<String, Value>::iterator;
104 using size_type = std::multimap<String, Value>::size_type;
109 template <
class Iterator>
114 Object(
const std::initializer_list<std::pair<String, Value>> & contents_r );
116 template <
typename K,
typename V>
119 template <
typename K,
typename V>
126 void add(std::initializer_list<std::pair<String, Value> > contents_r );
129 std::string
asJSON()
const;
132 std::ostream &
dumpOn( std::ostream &
str )
const;
147 return _values.equal_range (key);
151 return _values.equal_range (key);
160 std::ostream &
dumpOn( std::ostream &
str, std::map<String, Value>::const_iterator val_r )
const;
239 std::string
asJSON()
const;
242 return std::get<Null>(
_value );
246 return std::get<Bool>(
_value );
250 return std::get<String>(
_value );
254 return std::get<Int>(
_value );
258 return std::get<UInt>(
_value );
262 return std::get<Number>(
_value );
266 return std::get<Object>(
_value );
270 return std::get<Array>(
_value );
278 return std::holds_alternative<Null>(
_value);
282 return std::visit([](
const auto &t) {
284 if constexpr ( std::is_same_v<_Type, Bool> ) {
286 }
else if constexpr ( std::is_same_v<_Type, String> ) {
288 }
else if constexpr ( std::is_same_v<_Type, Int> ) {
290 }
else if constexpr ( std::is_same_v<_Type, UInt> ) {
292 }
else if constexpr ( std::is_same_v<_Type, Number> ) {
294 }
else if constexpr ( std::is_same_v<_Type, Object> ) {
296 }
else if constexpr ( std::is_same_v<_Type, Array> ) {
307 using JsonValueData = std::variant<Null, Bool, String, Int, UInt, Number, Object, Array>;
311 template<
class Iterator>
314 std::for_each(
begin,
end, [
this](
const auto &v) { this->
add(v); } );
321 template <
typename T>
323 return Value( std::forward<T>(v) );
std::ostream & dumpOn(std::ostream &str) const
Stream output.
Array(const std::list< V > &cont_r)
std::vector< Value > _values
std::string asJSON() const
JSON representation.
std::ostream & operator<<(std::ostream &str, const Array &obj)
Stream output.
const Value & operator[](size_type n) const
std::string asString() const
String representation.
Value & operator[](size_type n)
const_iterator begin() const
const_iterator end() const
Array(const std::set< V > &cont_r)
Array(const std::vector< V > &cont_r)
void add(Value val_r)
Push JSON Value to Array.
std::vector< Value >::const_iterator const_iterator
bool operator==(const Array &other) const
std::vector< Value >::size_type size_type
std::vector< Value >::iterator iterator
Object(Iterator begin, Iterator end)
Construct from map-iterator.
const_iterator end() const
std::multimap< String, Value >::size_type size_type
std::multimap< String, Value >::iterator iterator
const_iterator begin() const
std::string asJSON() const
JSON representation.
std::ostream & dumpOn(std::ostream &str) const
Stream output.
const Value & value(const String &key) const
std::pair< const_iterator, const_iterator > equal_range(const String &key) const
bool contains(const String &key) const
Object(std::map< K, V > values)
std::ostream & operator<<(std::ostream &str, const Object &obj)
Stream output.
Object(std::multimap< K, V > values)
std::vector< Value > values(const String &key) const
std::multimap< String, Value > _values
std::pair< iterator, iterator > equal_range(const String &key)
std::multimap< String, Value >::const_iterator const_iterator
void add(String key_r, Value val_r)
Add key/value pair.
bool operator==(const Object &other) const
const UInt & asUInt() const
Value(std::uint64_t val_r)
const String & asString() const
Value(std::uint32_t val_r)
const Bool & asBool() const
bool operator==(const Value &other) const
Value(std::int16_t val_r)
std::ostream & dumpOn(std::ostream &str) const
Stream output.
std::ostream & operator<<(std::ostream &str, const Value &obj)
Stream output.
Value(std::int64_t val_r)
Value & operator=(Value &&)=default
Value(std::int32_t val_r)
Value(const Value &)=default
const Array & asArray() const
const Null & asNull() const
Value(std::uint16_t val_r)
std::variant< Null, Bool, String, Int, UInt, Number, Object, Array > JsonValueData
std::string asJSON() const
JSON representation.
Value & operator=(const Value &)=default
Value(std::uint8_t val_r)
const Number & asNumber() const
const Object & asObject() const
const Int & asInt() const
typename decay< T >::type decay_t
String related utilities and Regular expression matching.
json::Value toJSON(const sat::Transaction::Step &step_r)
See COMMITBEGIN (added in v1) on page Commit plugin for the specs.
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...
#define for_(IT, BEG, END)
Convenient for-loops using iterator.