#![forbid(unsafe_code)]
#![warn(clippy::all)]
mod commands;
use anyhow::Result;
use clap::{Parser, Subcommand};
use tracing_subscriber::EnvFilter;
#[derive(Parser)]
#[command(
name = "typesec",
about = "Type-level AI security policy enforcement CLI",
version
)]
struct Cli {
#[arg(short, long, global = true)]
verbose: bool,
#[command(subcommand)]
command: Commands,
}
#[derive(Subcommand)]
enum Commands {
Validate(commands::validate::ValidateArgs),
Check(commands::check::CheckArgs),
Generate(commands::generate::GenerateArgs),
Run(commands::run::RunArgs),
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
let filter = if cli.verbose {
EnvFilter::new("debug")
} else {
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info"))
};
tracing_subscriber::fmt().with_env_filter(filter).init();
match cli.command {
Commands::Validate(args) => commands::validate::run(args),
Commands::Check(args) => commands::check::run(args),
Commands::Generate(args) => commands::generate::run(args),
Commands::Run(args) => commands::run::run(args).await,
}
}