use anyhow::Result;
use clap::Parser;
use openserve::{
config::Config,
server::Server,
telemetry,
Args,
};
use std::sync::Arc;
use tracing::{info, error};
#[tokio::main]
async fn main() -> Result<()> {
let args = Args::parse();
let config = if let Some(config_path) = args.config {
Config::from_file(&config_path)?
} else {
Config::from_args(&args)?
};
telemetry::init(&config.telemetry)?;
info!(
"Starting OpenServe v{} with AI features {}",
env!("CARGO_PKG_VERSION"),
if config.ai.enabled { "enabled" } else { "disabled" }
);
let server = Server::new(Arc::new(config)).await?;
match server.run().await {
Ok(_) => {
info!("Server stopped gracefully");
Ok(())
}
Err(e) => {
error!("Server error: {}", e);
Err(e)
}
}
}