terraphim_config 1.16.34

Terraphim configuration
Documentation
use terraphim_automata::AutomataPath;
use terraphim_config::{
    ConfigBuilder, Haystack, KnowledgeGraph, Result, Role, ServiceType, TerraphimConfigError,
};
use terraphim_persistence::Persistable;

#[tokio::main]
async fn main() -> Result<()> {
    let _ = tracing_subscriber::fmt()
        .with_env_filter("info")
        .try_init()
        .map_err(TerraphimConfigError::TracingSubscriber);

    let mut config = ConfigBuilder::new()
        .add_role("Engineer", {
            let mut engineer_role = Role::new("Engineer");
            engineer_role.shortname = Some("Engineer".to_string());
            engineer_role.theme = "lumen".to_string();
            engineer_role.kg = Some(KnowledgeGraph {
                automata_path: Some(AutomataPath::local_example()),
                knowledge_graph_local: None,
                public: false,
                publish: false,
            });
            engineer_role.haystacks = vec![Haystack {
                location: "localsearch".to_string(),
                service: ServiceType::Ripgrep,
                read_only: false,
                fetch_content: false,
                atomic_server_secret: None,
                extra_parameters: std::collections::HashMap::new(),
            }];
            engineer_role
        })
        .build()?;

    let json_str = serde_json::to_string_pretty(&config)?;
    println!("json_str: {:?}", json_str);

    println!("key: {}", config.get_key());
    config.save().await?;
    config.save_to_one("dashmap").await?;

    println!("saved obj: {:?} to all", config);
    let (_ops, fastest_op) = config.load_config().await?;
    println!("fastest_op: {:?}", fastest_op.info());

    let key = config.get_key();
    println!("key: {}", key);
    let loaded_config = config.load().await?;
    println!("loaded obj: {:?}", loaded_config);
    assert_eq!(loaded_config.get_key(), config.get_key());

    Ok(())
}