5namespace Stroika::Frameworks::WebService::JSONRPC {
12 inline const Foundation::DataExchange::ObjectVariantMapper Request::kMapper = [] () {
13 using namespace Foundation::DataExchange;
14 ObjectVariantMapper m;
15 using SEQ_OR_MAP_ = variant<Mapping<String, VariantValue>, Sequence<VariantValue>>;
17 [] ([[maybe_unused]]
const ObjectVariantMapper& mapper,
const SEQ_OR_MAP_* obj) -> VariantValue {
18 if (
auto om = get_if<Mapping<String, VariantValue>> (obj)) {
19 return VariantValue{*om};
21 else if (
auto os = get_if<Sequence<VariantValue>> (obj)) {
22 return VariantValue{*os};
26 return VariantValue{};
29 [] ([[maybe_unused]]
const ObjectVariantMapper& mapper,
const VariantValue& d, SEQ_OR_MAP_* intoObj) ->
void {
30 if (d.GetType () == VariantValue::eMap) {
31 *intoObj = d.As<Mapping<String, VariantValue>> ();
33 else if (d.GetType () == VariantValue::eArray) {
34 *intoObj = d.As<Sequence<VariantValue>> ();
38 *intoObj = d.As<Sequence<VariantValue>> ();
41 m.AddCommonType<optional<SEQ_OR_MAP_>> ();
42 m.AddClass<Request> ({
43 {
"jsonrpc"sv, &Request::jsonrpc},
55 inline const Foundation::DataExchange::ObjectVariantMapper Error::kMapper = [] () {
56 using namespace Foundation::DataExchange;
57 ObjectVariantMapper m;
58 m.AddClass<Request> ({
59 {
"code"sv, &Error::code},
60 {
"message"sv, &Error::message},
61 {
"data"sv, &Error::data},
71 inline const Foundation::DataExchange::ObjectVariantMapper Response::kMapper = [] () {
72 using namespace Foundation::DataExchange;
73 ObjectVariantMapper m;
75 m.AddCommonType<optional<Error>> ();
78 m.AddClass<Response> ({
79 {
"jsonrpc"sv, &Response::jsonrpc},
82 {
"id"sv, &Response::id},
#define RequireNotReached()
optional< VariantValue > id
optional< variant< Mapping< String, VariantValue >, Sequence< VariantValue > > > params
optional< VariantValue > result