use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use terraphim_persistence::{Persistable, Result};
#[derive(Debug, Clone, Serialize, Deserialize)]
struct MyStruct {
name: String,
age: u8,
#[serde(skip_serializing_if = "Option::is_none")]
description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
tags: Option<Vec<String>>,
}
#[async_trait]
impl Persistable for MyStruct {
fn new(name: String) -> Self {
MyStruct {
name,
age: 0,
description: None,
tags: None,
}
}
async fn save_to_one(&self, profile_name: &str) -> Result<()> {
self.save_to_profile(profile_name).await?;
Ok(())
}
async fn save(&self) -> Result<()> {
let _op = &self.load_config().await?.1;
let _ = self.save_to_all().await?;
Ok(())
}
async fn load(&mut self) -> Result<Self> {
let op = &self.load_config().await?.1;
let key = self.get_key();
let obj = self.load_from_operator(&key, op).await?;
Ok(obj)
}
fn get_key(&self) -> String {
self.name.clone()
}
}
#[tokio::main]
async fn main() -> Result<()> {
let _ = tracing_subscriber::fmt().with_env_filter("info").try_init();
println!("š Enhanced Persistence with Multi-Agent Intelligence");
println!("====================================================");
println!("\nš Example 1: Traditional Persistence");
println!("====================================");
let obj = MyStruct {
name: "No vampire".to_string(),
age: 110,
description: Some("A mysterious individual with enhanced longevity".to_string()),
tags: Some(vec!["supernatural".to_string(), "longevity".to_string()]),
};
obj.save_to_one("s3").await?;
obj.save().await?;
println!("saved obj: {:?} to all", obj);
let (_ops, fastest_op) = obj.load_config().await?;
println!("fastest_op: {:#?}", fastest_op);
let mut obj1 = MyStruct::new("obj".to_string());
let key = obj.get_key();
println!("key: {}", key);
obj1 = obj1.load().await?;
println!("loaded obj: {:?}", obj1);
if false {
println!("\nš” Multi-Agent Enhanced Persistence Available");
println!("=============================================");
println!("To enable intelligent persistence capabilities:");
println!(" 1. Add 'multi_agent' feature flag");
println!(" 2. Combine traditional persistence with AI analysis");
println!(" 3. Get intelligent insights about your data structures");
println!(" 4. Generate enhanced data automatically");
println!("\n Example: cargo run --features multi_agent --example simple_struct");
}
println!("\nš Enhanced Persistence Demo Complete!");
println!("\nā
Key Benefits:");
println!(" ⢠Traditional persistence with metadata enhancement");
println!(" ⢠AI-powered data structure analysis");
println!(" ⢠Intelligent data generation and suggestions");
println!(" ⢠Performance tracking for data operations");
println!(" ⢠Seamless integration with existing persistence patterns");
Ok(())
}