Rust configuration integrated in anthill-di
Library required Rust nightly for anthill-di
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
rust
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
``` rust
fn () {
//let rootcontext = DependencyContext::newroot()
//rootcontext.registersource(|| Ok(JsonFileConfiguration::
root_context.register_configuration::<Test, JsonFileConfiguration::<Test>>(DependencyLifeCycle::Transient).await.unwrap();
let configuration: Test = root_context.resolve().await.unwrap();
} ```
``` rust
fn () {
//let rootcontext = DependencyContext::newroot()
//rootcontext.registersource(|| Ok(JsonFileConfiguration::
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
``` rust
fn () {
//let rootcontext = DependencyContext::newroot()
//rootcontext.registersource(|| Ok(JsonFileConfiguration::
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
} ```
Minimal required version of anthill-di 1.2.3