4 releases (stable)
1.2.5 | May 5, 2022 |
---|---|
1.2.4 | May 4, 2022 |
0.1.0 | Apr 22, 2022 |
#701 in Configuration
Used in anthill-service-system
19KB
265 lines
anthill-di-configuration-extension
Rust configuration integrated in anthill-di
Warning
Library required Rust nightly for anthill-di
Basic concepts
Always register the configuration source first
At this stage, json loading via serde_json is implemented, but you can extend the functionality by implementing trait IService
fn _() {
let root_context = DependencyContext::new_root()
root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string(), false))).await.unwrap();
}
You can then register a config type or a custom snapshot wrapper
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_configuration::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration: Test = root_context.resolve().await.unwrap();
}
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_snapshot::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration_snapshot: ConfigurationSnapshot<Test, JsonFileConfiguration::<Test>> = root_context.resolve().await.unwrap();
}
To synchronize data with the source, ConfigurationSnapshot has a sync
method
To save data, call store
fn _() {
//let root_context = DependencyContext::new_root()
//root_context.register_source(|_| Ok(JsonFileConfiguration::<Test>::new("configuration_test.json".to_string()))).await.unwrap();
root_context.register_snapshot::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration_snapshot: ConfigurationSnapshot<Test, JsonFileConfiguration::<Test>> = root_context.resolve().await.unwrap();
// we have some configuration_snapshot.value from file
// now change file
// configuration_snapshot.value stay the same
configuration_snapshot.sync().await.unwrap();
// now we have configuration_snapshot.value from changed file
// change configuration value
configuration_snapshot.value.test_value = "new string".to_string();
// store new value to file
configuration_snapshot.store().await.unwrap();
// now we have changed file
}
See examples present in src/tests folder
Minimal required version of anthill-di 1.2.3
Dependencies
~3.5–10MB
~98K SLoC