userver: /home/antonyzhilin/arcadia/taxi/uservices/userver/libraries/grpc-protovalidate/src/grpc-protovalidate/client/component.cpp Source File
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
component.cpp
1#include <userver/grpc-protovalidate/client/component.hpp>
2
3#include <userver/ugrpc/client/middlewares/log/component.hpp>
4#include <userver/yaml_config/merge_schemas.hpp>
5
6#include <grpc-protovalidate/client/middleware.hpp>
7
8USERVER_NAMESPACE_BEGIN
9
10namespace grpc_protovalidate::client {
11
12ValidationSettings Parse(const yaml_config::YamlConfig& config, formats::parse::To<ValidationSettings>) {
13 ValidationSettings settings;
14 settings.fail_fast = config["fail-fast"].As<bool>(settings.fail_fast);
15 return settings;
16}
17
18Settings Parse(const yaml_config::YamlConfig& config, formats::parse::To<Settings>) {
19 Settings settings;
20 settings.global.fail_fast = config["fail-fast"].As<bool>(settings.global.fail_fast);
21 settings.per_method = config["methods"].As<utils::impl::TransparentMap<std::string, ValidationSettings>>({});
22 return settings;
23}
24
25ValidatorComponent::ValidatorComponent(
26 const components::ComponentConfig& config,
27 const components::ComponentContext& context
28)
29 : ugrpc::client::MiddlewareFactoryComponentBase(
30 config,
31 context,
32 middlewares::MiddlewareDependencyBuilder().InGroup<middlewares::groups::Core>()
33 ) {}
34
35std::shared_ptr<const ugrpc::client::MiddlewareBase> ValidatorComponent::CreateMiddleware(
36 const ugrpc::client::ClientInfo& /*client_info*/,
37 const yaml_config::YamlConfig& middleware_config
38) const {
39 return std::make_shared<Middleware>(middleware_config.As<Settings>());
40}
41
42yaml_config::Schema ValidatorComponent::GetMiddlewareConfigSchema() const { return GetStaticConfigSchema(); }
43
44yaml_config::Schema ValidatorComponent::GetStaticConfigSchema() {
45 return yaml_config::MergeSchemas<ugrpc::client::MiddlewareFactoryComponentBase>(R"(
46type: object
47description: gRPC response validator component
48additionalProperties: false
49properties:
50 fail-fast:
51 type: boolean
52 description: do not check remaining constraints after first error is encountered
53 defaultDescription: true
54 methods:
55 type: object
56 description: per-method middleware options overrides
57 properties: {}
58 additionalProperties:
59 type: object
60 description: method options
61 additionalProperties: false
62 properties:
63 fail-fast:
64 type: boolean
65 description: see 'fail-fast' global option
66)");
67}
68
69} // namespace grpc_protovalidate::client
70
71USERVER_NAMESPACE_END