userver: /data/code/userver/libraries/grpc-protovalidate/src/grpc-protovalidate/client/component.cpp Source File
Loading...
Searching...
No Matches
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
8#ifndef ARCADIA_ROOT
9#include "generated/src/grpc-protovalidate/client/component.yaml.hpp" // Y_IGNORE
10#endif
11
12USERVER_NAMESPACE_BEGIN
13
14namespace grpc_protovalidate::client {
15
16ValidationSettings Parse(const yaml_config::YamlConfig& config, formats::parse::To<ValidationSettings>) {
17 ValidationSettings settings;
18 settings.fail_fast = config["fail-fast"].As<bool>(settings.fail_fast);
19 return settings;
20}
21
22Settings Parse(const yaml_config::YamlConfig& config, formats::parse::To<Settings>) {
23 Settings settings;
24 settings.global.fail_fast = config["fail-fast"].As<bool>(settings.global.fail_fast);
25 settings.per_method = config["methods"].As<utils::impl::TransparentMap<std::string, ValidationSettings>>({});
26 return settings;
27}
28
29ValidatorComponent::ValidatorComponent(
30 const components::ComponentConfig& config,
31 const components::ComponentContext& context
32)
33 : ugrpc::client::MiddlewareFactoryComponentBase(
34 config,
35 context,
36 middlewares::MiddlewareDependencyBuilder().InGroup<middlewares::groups::Core>()
37 ) {}
38
39std::shared_ptr<const ugrpc::client::MiddlewareBase> ValidatorComponent::CreateMiddleware(
40 const ugrpc::client::ClientInfo& /*client_info*/,
41 const yaml_config::YamlConfig& middleware_config
42) const {
43 return std::make_shared<Middleware>(middleware_config.As<Settings>());
44}
45
46yaml_config::Schema ValidatorComponent::GetMiddlewareConfigSchema() const { return GetStaticConfigSchema(); }
47
48yaml_config::Schema ValidatorComponent::GetStaticConfigSchema() {
49 return yaml_config::MergeSchemasFromResource<
50 ugrpc::client::MiddlewareFactoryComponentBase>("src/grpc-protovalidate/client/component.yaml");
51}
52
53} // namespace grpc_protovalidate::client
54
55USERVER_NAMESPACE_END