Class ConfigSchema#

Nested Relationships#

Nested Types#

Class Documentation#

class ConfigSchema#

Dynamic config schema for map-like options.

The schema supports:

  • Option declaration (def_option<T>)

  • Optional canonicalizer (set_canonicalizer)

  • Resolution (Resolve) that performs validation/defaulting, unknown-key policy, and canonicalization (last).

Public Types

using ConfigMap = ffi::Map<ffi::String, ffi::Any>#
using Canonicalizer = ffi::TypedFunction<ConfigMap(ConfigMap)>#

Public Functions

template<typename T, typename ...Traits>
inline ConfigSchema &def_option(const ffi::String &key, Traits&&... traits)#

Declare a typed option.

Validation/coercion is implicitly generated from T. Additional optional traits may be supplied (e.g. refl::DefaultValue, const char* doc).

Template Parameters:
  • T – The canonical value type of this option.

  • Traits – Optional metadata/traits.

Parameters:
  • key – Option key.

  • traits – Optional traits.

Returns:

Reference to *this for chaining.

inline void set_canonicalizer(Canonicalizer f)#

Set whole-object canonicalizer.

inline void set_error_on_unknown(bool value)#

Set whether unknown keys trigger an error.

inline ConfigMap Resolve(ConfigMap config) const#

Default/validate, then canonicalize a config object.

Resolve flow: 1) Validate/coerce declared options in declaration order. 2) Materialize defaults and enforce required options. 3) Apply unknown-key policy. 4) Run canonicalizer as final step.

Parameters:

config – Input config object.

Throws:

ValueError / TypeError – with option context.

Returns:

Canonical validated config object.

inline const std::vector<OptionEntry> &ListOptions() const#

List declared options in declaration order.

Returns:

Const reference to the option entries vector.

inline bool HasOption(const ffi::String &key) const#

Check if an option with the given key exists.

struct OptionEntry#

Schema entry for one declared option.

Public Members

ffi::String key#

Option key.

ffi::String type_str#

Type string for this option.

ffi::TypedFunction<ffi::Any(ffi::Any)> validator#

Per-option validator/coercer (Any -> Any).

bool has_default = false#

Whether this option has a default value or factory.

bool default_from_factory = false#

Whether the default is produced by a factory function.

ffi::Any default_value#

Default value, or factory function () -> Any when default_from_factory is true.

struct AttrValidator#

Trait to set a custom validator for a config option.

Public Functions

inline explicit AttrValidator(ffi::TypedFunction<ffi::Any(ffi::Any)> f)#

Public Members

ffi::TypedFunction<ffi::Any(ffi::Any)> func#