use async_trait::async_trait;
use serde_json::{json, Value};
use stratify::config::{Builder, Error, Source};
struct InMemorySource {
priority: u32,
}
#[async_trait]
impl Source for InMemorySource {
fn name(&self) -> &str {
"in-memory"
}
fn priority(&self) -> u32 {
self.priority
}
async fn load(&self) -> Result<Value, Error> {
Ok(json!({
"database": { "host": "from-custom-source" },
"feature_flags": { "new_ui": "true" }
}))
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let store = Builder::default()
.json("examples/config/base.json", 100)
.source(InMemorySource { priority: 20 })
.build()
.await?;
println!(
"database.host = {:?}",
store.get_str("database.host")
);
println!(
"database.port = {:?}",
store.get_str("database.port")
);
println!(
"feature_flags.new_ui = {:?}",
store.get_str("feature_flags.new_ui")
);
Ok(())
}