Skip to main content

define_config_registry

Macro define_config_registry 

Source
macro_rules! define_config_registry {
    ($vis:vis static $name:ident = [$($definition:expr),* $(,)?];) => { ... };
}
Expand description

Builds a static ConfigRegistry from a list of ConfigDefinition items.

Product crates normally wrap this macro in their own module that names product-specific keys and default functions. Keeping registration declarative makes it easier for services to hand the same registry to default initialization, validation, OpenAPI presentation, and admin UI metadata. Duplicate and empty keys in the static list are rejected at compile time.

use aster_forge_config::ConfigDefinition;

const FIRST: ConfigDefinition = ConfigDefinition {
    key: "first",
    ..ConfigDefinition::private_system()
};
const SECOND: ConfigDefinition = ConfigDefinition { key: "second", ..FIRST };
aster_forge_config::define_config_registry! {
    static REGISTRY = [FIRST, SECOND];
}
aster_forge_config::define_config_registry! {
    static EMPTY_REGISTRY = [];
}
assert!(REGISTRY.contains_key("second"));
assert!(EMPTY_REGISTRY.validate_unique_keys().is_ok());
ⓘ
use aster_forge_config::ConfigDefinition;

const DEFINITION: ConfigDefinition = ConfigDefinition {
    key: "duplicate",
    ..ConfigDefinition::private_system()
};
aster_forge_config::define_config_registry! {
    static REGISTRY = [DEFINITION, DEFINITION];
}
ⓘ
use aster_forge_config::ConfigDefinition;

const DEFINITION: ConfigDefinition = ConfigDefinition {
    key: "",
    ..ConfigDefinition::private_system()
};
aster_forge_config::define_config_registry! {
    static REGISTRY = [DEFINITION];
}