9#ifndef ZYPP_CORE_PARSER_JSON_JSON_VALUE_DEFINED
10#define ZYPP_CORE_PARSER_JSON_JSON_VALUE_DEFINED
45 template <
class Iterator>
58 Array( std::initializer_list<Value> contents_r );
61 void add(
Value val_r );
64 void add(
const std::initializer_list<Value> & contents_r );
75 std::ostream &
dumpOn( std::ostream &
str )
const;
83 const Value &operator[]( size_type n )
const;
84 Value &operator[](size_type n);
86 size_type size()
const;
104 using iterator = std::multimap<String, Value>::iterator;
106 using size_type = std::multimap<String, Value>::size_type;
111 template <
class Iterator>
116 Object(
const std::initializer_list<std::pair<String, Value>> & contents_r );
118 template <
typename K,
typename V>
121 template <
typename K,
typename V>
128 void add(std::initializer_list<std::pair<String, Value> > contents_r );
131 std::string asJSON()
const;
134 std::ostream &
dumpOn( std::ostream &
str )
const;
149 return _values.equal_range (key);
153 return _values.equal_range (key);
156 std::vector<Value> values(
const String &key)
const;
162 std::ostream &
dumpOn( std::ostream &
str, std::map<String, Value>::const_iterator val_r )
const;
241 std::string asJSON()
const;
244 return std::get<Null>(
_value );
248 return std::get<Bool>(
_value );
252 return std::get<String>(
_value );
256 return std::get<Int>(
_value );
260 return std::get<UInt>(
_value );
264 return std::get<Number>(
_value );
268 return std::get<Object>(
_value );
272 return std::get<Array>(
_value );
280 return std::holds_alternative<Null>(
_value);
284 return std::visit([](
const auto &t) {
286 if constexpr ( std::is_same_v<_Type, Bool> ) {
288 }
else if constexpr ( std::is_same_v<_Type, String> ) {
290 }
else if constexpr ( std::is_same_v<_Type, Int> ) {
292 }
else if constexpr ( std::is_same_v<_Type, UInt> ) {
294 }
else if constexpr ( std::is_same_v<_Type, Number> ) {
296 }
else if constexpr ( std::is_same_v<_Type, Object> ) {
298 }
else if constexpr ( std::is_same_v<_Type, Array> ) {
309 using JsonValueData = std::variant<Null, Bool, String, Int, UInt, Number, Object, Array>;
313 template<
class Iterator>
316 std::for_each(
begin,
end, [
this](
const auto &v) { this->
add(v); } );
323 template <
typename T>
325 return Value( std::forward<T>(v) );
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Provides API related macros.
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::string asString() const
String representation.
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
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::ostream & dumpOn(std::ostream &str) const
Stream output.
std::pair< const_iterator, const_iterator > equal_range(const String &key) const
Object(std::map< K, V > values)
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.
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.
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.
ZYPP_API std::ostream & operator<<(std::ostream &str, const Bool &obj)
relates: Bool Stream output
bool operator==(const Capability &lhs, const Capability &rhs)
relates: Capability
bool contains(const Container &c, const Elem &elem)
const Arch Arch_empty ZYPP_API
relates: Arch This is an empty Arch represented by an empty string.
std::ostream & dumpOn(std::ostream &str, const Capability &obj)
relates: Capability Detailed stream output
Convenient building of std::string via std::ostringstream Basically a std::ostringstream autoconverti...