4#include "rpc/common/Concepts.hpp"
5#include "rpc/common/Specs.hpp"
6#include "rpc/common/Types.hpp"
8#include <boost/json/value.hpp>
13#include <initializer_list>
25 std::vector<FieldSpec> specs_;
33 explicit Section(std::initializer_list<FieldSpec> specs) : specs_{specs}
46 verify(boost::json::value& value, std::string_view key)
const;
55 std::vector<FieldSpec> specs_;
65 : idx_{idx}, specs_{specs}
77 verify(boost::json::value& value, std::string_view key)
const;
84template <
typename Type>
92 explicit IfType(Requirements&&... requirements)
94 [... r = std::forward<Requirements>(
96 )](boost::json::value& j, std::string_view key) ->
MaybeError {
97 std::optional<
Status> firstFailure = std::nullopt;
101 [&j, &key, &firstFailure, req = &r]() {
105 if (
auto const res = req->verify(j, key); not res)
106 firstFailure = res.error();
111 return Error{firstFailure.value()};
131 verify(boost::json::value& value, std::string_view key)
const
133 if (not value.is_object() or not value.as_object().contains(key))
136 if (not rpc::validation::checkType<Type>(value.as_object().at(key)))
139 return processor_(value, key);
143 std::function<
MaybeError(boost::json::value&, std::string_view)> processor_;
150template <
typename RequirementOrModifierType>
153 RequirementOrModifierType reqOrModifier_;
165 : reqOrModifier_{std::move(reqOrModifier)}, error_{std::move(err)}
177 verify(boost::json::value
const& value, std::string_view key)
const
180 if (
auto const res = reqOrModifier_.verify(value, key); not res)
181 return Error{error_};
196 verify(boost::json::value& value, std::string_view key)
const
199 if (
auto const res = reqOrModifier_.verify(value, key); not res)
200 return Error{error_};
214 modify(boost::json::value& value, std::string_view key)
const
218 if (
auto const res = reqOrModifier_.modify(value, key); not res)
219 return Error{error_};
Specifies what a modifier used with rpc::FieldSpec must provide.
Definition Concepts.hpp:31
Specifies what a requirement used with rpc::FieldSpec must provide.
Definition Concepts.hpp:23
std::expected< void, Status > MaybeError
Return type used for Validators that can return error but don't have specific value to return.
Definition Types.hpp:36
std::unexpected< Status > Error
The type that represents just the error part of MaybeError.
Definition Types.hpp:56
A status returned from any RPC handler.
Definition Errors.hpp:65