6#include <userver/components/component_config.hpp>
7#include <userver/components/raw_component_base.hpp>
8#include <userver/yaml_config/impl/validate_static_config.hpp>
9#include <userver/yaml_config/schema.hpp>
11USERVER_NAMESPACE_BEGIN
15enum class ValidationMode {
20ValidationMode Parse(
const yaml_config::
YamlConfig& value, formats::
parse::To<ValidationMode>);
24[[noreturn]]
void WrapInvalidStaticConfigSchemaException(
const std::exception&);
26template <
typename Component>
27void TryValidateStaticConfig(
28 std::string_view component_name,
29 const components::ComponentConfig& static_config,
30 ValidationMode validation_condition
32 if (
components::kForceNoValidation<Component>) {
36 if (
components::kHasValidate<Component> || validation_condition == ValidationMode::kAll) {
37 yaml_config::Schema schema;
39 schema = Component::GetStaticConfigSchema();
40 }
catch (
const std::exception& ex) {
41 WrapInvalidStaticConfigSchemaException(ex);
43 schema.path = component_name;
45 yaml_config::impl::Validate(static_config, schema);
49template <
typename Component>
50yaml_config::Schema GetStaticConfigSchema() {
52 return Component::GetStaticConfigSchema();