use batata_client::prelude::*;
#[tokio::main]
async fn main() -> Result<()> {
tracing_subscriber::fmt::init();
let client = BatataClient::builder()
.server_addr("localhost:8848")
.namespace("public")
.app_name("config-example")
.build()
.await?;
println!("Connected to Batata server!");
let config_service = client.config_service();
println!("\n--- Publishing configuration ---");
let success = config_service
.publish_config("example-config", "DEFAULT_GROUP", "key=value\nfoo=bar")
.await?;
println!("Publish result: {}", success);
println!("\n--- Getting configuration ---");
match config_service.get_config("example-config", "DEFAULT_GROUP").await {
Ok(content) => println!("Config content:\n{}", content),
Err(e) => println!("Failed to get config: {}", e),
}
println!("\n--- Adding configuration listener ---");
config_service.add_callback_listener("example-config", "DEFAULT_GROUP", |event| {
println!("Configuration changed!");
println!(" Data ID: {}", event.data_id);
println!(" Group: {}", event.group);
println!(" Change type: {:?}", event.change_type);
println!(" New content: {}", event.new_content);
});
client.start_config_service().await?;
println!("\n--- Updating configuration ---");
config_service
.publish_config(
"example-config",
"DEFAULT_GROUP",
"key=new_value\nfoo=updated",
)
.await?;
tokio::time::sleep(tokio::time::Duration::from_secs(35)).await;
println!("\n--- Removing configuration ---");
let removed = config_service
.remove_config("example-config", "DEFAULT_GROUP")
.await?;
println!("Remove result: {}", removed);
client.shutdown().await;
println!("\nClient shutdown complete.");
Ok(())
}