mod client;
mod commands;
mod format;
mod repl;
use clap::Parser;
#[derive(Parser)]
#[command(name = "yql", about = "YantrikDB interactive client", version)]
struct Cli {
#[arg(short = 'H', long, default_value = "localhost")]
host: String,
#[arg(short = 'p', long, default_value = "7438")]
port: u16,
#[arg(short = 't', long, env = "YQL_TOKEN")]
token: String,
#[arg(long)]
tls: bool,
#[arg(short = 'c', long)]
command: Option<String>,
}
fn main() -> anyhow::Result<()> {
let cli = Cli::parse();
let scheme = if cli.tls { "https" } else { "http" };
let base_url = format!("{}://{}:{}", scheme, cli.host, cli.port);
let client = client::Client::new(base_url, cli.token)?;
match client.health() {
Ok(_) => {}
Err(e) => {
eprintln!("{}: {}", colored::Colorize::red("connection failed"), e);
std::process::exit(1);
}
}
if let Some(cmd) = cli.command {
return commands::execute(&client, &cmd);
}
repl::run(client)
}