23#include "rpc/common/Concepts.hpp"
24#include "rpc/common/Specs.hpp"
25#include "rpc/common/Types.hpp"
27#include <boost/json/value.hpp>
28#include <fmt/format.h>
32#include <initializer_list>
44 std::vector<FieldSpec> specs_;
52 explicit Section(std::initializer_list<FieldSpec> specs) : specs_{specs}
65 verify(boost::json::value& value, std::string_view key)
const;
74 std::vector<FieldSpec> specs_;
84 : idx_{idx}, specs_{specs}
96 verify(boost::json::value& value, std::string_view key)
const;
103template <
typename Type>
111 explicit IfType(Requirements&&... requirements)
113 [... r = std::forward<Requirements>(
115 )](boost::json::value& j, std::string_view key) ->
MaybeError {
116 std::optional<
Status> firstFailure = std::nullopt;
120 [&j, &key, &firstFailure, req = &r]() {
124 if (
auto const res = req->verify(j, key); not res)
125 firstFailure = res.error();
131 return Error{firstFailure.value()};
151 verify(boost::json::value& value, std::string_view key)
const
153 if (not value.is_object() or not value.as_object().contains(key))
156 if (not rpc::validation::checkType<Type>(value.as_object().at(key)))
159 return processor_(value, key);
163 std::function<
MaybeError(boost::json::value&, std::string_view)> processor_;
170template <
typename RequirementOrModifierType>
173 RequirementOrModifierType reqOrModifier_;
185 : reqOrModifier_{std::move(reqOrModifier)}, error_{std::move(err)}
197 verify(boost::json::value
const& value, std::string_view key)
const
200 if (
auto const res = reqOrModifier_.verify(value, key); not res)
201 return Error{error_};
216 verify(boost::json::value& value, std::string_view key)
const
219 if (
auto const res = reqOrModifier_.verify(value, key); not res)
220 return Error{error_};
234 modify(boost::json::value& value, std::string_view key)
const
238 if (
auto const res = reqOrModifier_.modify(value, key); not res)
239 return Error{error_};
Specifies what a modifier used with rpc::FieldSpec must provide.
Definition Concepts.hpp:50
Specifies what a requirement used with rpc::FieldSpec must provide.
Definition Concepts.hpp:42
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:55
std::unexpected< Status > Error
The type that represents just the error part of MaybeError.
Definition Types.hpp:75
A status returned from any RPC handler.
Definition Errors.hpp:84