#![allow(dead_code)]
use anyhow::Result;
use clap::Parser;
use std::sync::Arc;
use std::process::exit;
use vectordb_lib::cli::{self, CliArgs}; use vectordb_lib::config::{self}; use qdrant_client::Qdrant;
#[tokio::main]
async fn main() -> Result<(), anyhow::Error> {
tracing_subscriber::fmt::init();
let args = CliArgs::parse();
let config = config::load_config()
.inspect_err(|e| tracing::error!("Configuration loading failed: {:?}", e))
.unwrap_or_default();
tracing::info!("Using Qdrant URL from config: {}", config.qdrant_url);
tracing::debug!("Initializing Qdrant Client...");
let qdrant_client_result = qdrant_client::Qdrant::from_url(&config.qdrant_url).build();
let client: Arc<Qdrant> = match qdrant_client_result {
Ok(client_instance) => {
tracing::debug!("Qdrant client initialized successfully.");
Arc::new(client_instance)
},
Err(e) => {
tracing::error!("Failed to initialize Qdrant client: {}", e);
eprintln!("Error initializing Qdrant client: {}", e);
eprintln!("Please check Qdrant URL in config ({}) and ensure the server is running.", config.qdrant_url);
exit(1);
}
};
tracing::info!("Executing command: {:?}", args.command);
let result = cli::handle_command(args, config, client).await;
if let Err(e) = result {
tracing::error!("Command execution failed: {:?}", e);
eprintln!("Error: {}", e);
exit(1);
} else {
tracing::debug!("Command executed successfully.");
}
Ok(())
}