use anyhow::Result;
use clap::Parser;
use neuronic::NeuronicApp;
use std::path::PathBuf;
use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt};
#[derive(Parser, Debug)]
#[command(name = "neuronic", version, about)]
struct Args {
#[arg(short, long, default_value = "neuronic.toml")]
config: PathBuf,
#[arg(short, long, default_value = "caryatid.monitor.snapshot")]
topic: String,
#[arg(short, long)]
debug: bool,
}
fn main() -> Result<()> {
let args = Args::parse();
let filter = if args.debug { "debug" } else { "info" };
tracing_subscriber::registry()
.with(
tracing_subscriber::EnvFilter::try_from_default_env().unwrap_or_else(|_| filter.into()),
)
.with(tracing_subscriber::fmt::layer())
.init();
tracing::info!("Starting Neuronic");
tracing::info!("Config: {:?}", args.config);
tracing::info!("Topic: {}", args.topic);
let options = eframe::NativeOptions {
viewport: egui::ViewportBuilder::default()
.with_inner_size([1280.0, 800.0])
.with_title("Neuronic - Message Flow Visualizer"),
..Default::default()
};
eframe::run_native(
"Neuronic",
options,
Box::new(move |cc| Ok(Box::new(NeuronicApp::new(cc, args.config, args.topic)))),
)
.map_err(|e| anyhow::anyhow!("eframe error: {}", e))
}