di 0.1.0
Loading...
Searching...
No Matches
di::JsonDeserializer< Reader > Class Template Reference

A deserializer for the JSON format. More...

#include <di/serialization/json_deserializer.h>

Public Types

template<typename T = void>
using Result = Expected<T, json_deserializer::ErrorCode>
using DeserializationFormat = JsonFormat

Public Member Functions

template<typename T>
requires (concepts::ConstructibleFrom<Reader, T>)
constexpr JsonDeserializer (T &&reader)
constexpr auto deserialize (InPlaceType< json::Value >) -> Result< json::Value >
template<typename T, concepts::InstanceOf< reflection::Fields > M>
constexpr auto deserialize (InPlaceType< T >, M fields) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Enumerators > M>
constexpr auto deserialize (InPlaceType< T >, M enumerators) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_bool() || M::is_integer() || M::is_string())
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M>
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T > requires(M::is_custom_atom() &&
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_tuple() && detail::all_deserializable<JsonDeserializer, meta::TupleElements<T>>)
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_variant() && detail::all_deserializable<JsonDeserializer, meta::VariantTypes<T>>)
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M, typename U = meta::Type<meta::RemoveCVRef<T>>>
requires (M::is_box() && concepts::Deserializable<U, JsonDeserializer>)
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_list() && concepts::Deserializable<meta::ContainerValue<T>, JsonDeserializer>)
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_map() && concepts::SameAs<json::String, meta::TupleElement<meta::ContainerValue<T>, 0>> && concepts::Deserializable<meta::TupleElement<meta::ContainerValue<T>, 1>, JsonDeserializer>)
constexpr auto deserialize (InPlaceType< T >, M) -> Result< T >
constexpr auto deserialize (InPlaceType< json::Null >) -> Result< json::Null >
constexpr auto reader () &-> Reader &
constexpr auto reader () const &-> Reader const &
constexpr auto reader () &&-> Reader &&

Public Attributes

auto result
return result

Detailed Description

template<concepts::Impl< io::Reader > Reader>
class di::JsonDeserializer< Reader >

A deserializer for the JSON format.

Template Parameters
ReaderThe type of the reader to read from.

This implements the JSON grammar as specified in RFC 8259.

Member Typedef Documentation

◆ DeserializationFormat

template<concepts::Impl< io::Reader > Reader>
using di::serialization::JsonDeserializer< Reader >::DeserializationFormat = JsonFormat

◆ Result

template<concepts::Impl< io::Reader > Reader>
template<typename T = void>
using di::serialization::JsonDeserializer< Reader >::Result = Expected<T, json_deserializer::ErrorCode>

Constructor & Destructor Documentation

◆ JsonDeserializer()

template<concepts::Impl< io::Reader > Reader>
template<typename T>
requires (concepts::ConstructibleFrom<Reader, T>)
di::serialization::JsonDeserializer< Reader >::JsonDeserializer ( T && reader)
inlineexplicitconstexpr

Member Function Documentation

◆ deserialize() [1/11]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< json::Null > ) ->Result< json::Null >
inlineconstexpr

◆ deserialize() [2/11]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< json::Value > ) ->Result< json::Value >
inlineconstexpr

◆ deserialize() [3/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Enumerators > M>
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M enumerators )->Result< T >
inlineconstexpr

◆ deserialize() [4/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Fields > M>
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M fields )->Result< T >
inlineconstexpr

◆ deserialize() [5/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_map() && concepts::SameAs<json::String, meta::TupleElement<meta::ContainerValue<T>, 0>> && concepts::Deserializable<meta::TupleElement<meta::ContainerValue<T>, 1>, JsonDeserializer>)
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [6/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_list() && concepts::Deserializable<meta::ContainerValue<T>, JsonDeserializer>)
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [7/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M, typename U = meta::Type<meta::RemoveCVRef<T>>>
requires (M::is_box() && concepts::Deserializable<U, JsonDeserializer>)
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [8/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_variant() && detail::all_deserializable<JsonDeserializer, meta::VariantTypes<T>>)
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [9/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_tuple() && detail::all_deserializable<JsonDeserializer, meta::TupleElements<T>>)
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [10/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
requires (M::is_bool() || M::is_integer() || M::is_string())
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >
inlineconstexpr

◆ deserialize() [11/11]

template<concepts::Impl< io::Reader > Reader>
template<typename T, concepts::InstanceOf< reflection::Atom > M>
auto di::serialization::JsonDeserializer< Reader >::deserialize ( InPlaceType< T > ,
M  )->Result< T >requires(M::is_custom_atom()&&
inlineconstexpr

◆ reader() [1/3]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::reader ( ) &&->Reader &&
inlineconstexpr

◆ reader() [2/3]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::reader ( ) &->Reader &
inlineconstexpr

◆ reader() [3/3]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::reader ( ) const &->Readerconst &
inlineconstexpr

Member Data Documentation

◆ result [1/2]

template<concepts::Impl< io::Reader > Reader>
return di::serialization::JsonDeserializer< Reader >::result

◆ result [2/2]

template<concepts::Impl< io::Reader > Reader>
auto di::serialization::JsonDeserializer< Reader >::result
Initial value:
= DI_TRY(di::parse<T>(string.view()).transform_error([&](di::Error error) {
return json_deserializer::Error(json_deserializer::ParseValueError(di::move(string), di::move(error)),
"."_s);
}))
#define DI_TRY(...)
Definition monad_try.h:13
StatusCode< Erased< long > > Error
Definition error.h:8
constexpr auto parse
Definition parse.h:23

The documentation for this class was generated from the following file: