use authzd::EntitiesRepository; use clap::{Parser, Subcommand}; #[derive(Parser, Debug)] #[command( author, version, about = "Authorization CLI for managing Cedar entities and policies" )] struct Args { #[command(subcommand)] command: Commands, } #[derive(Subcommand, Debug)] enum Commands { /// Generate entities from GitLab API Generate { /// Project ID or path (e.g., gitlab-org/gitlab) #[arg(short, long)] project: String, /// Output file path #[arg(short, long, default_value = "entities.json")] output: String, /// GitLab API token #[arg(short, long, env = "GITLAB_TOKEN")] token: String, /// GitLab instance URL #[arg( short = 'H', long, env = "GITLAB_HOST", default_value = "https://gitlab.com" )] host: String, }, } #[tokio::main] async fn main() -> Result<(), Box> { let args = Args::parse(); match args.command { Commands::Generate { project, output, token, host, } => { let repository = EntitiesRepository::new(token, host, project); let entities = repository.all().await?; let json = serde_json::to_string_pretty(&entities)?; std::fs::write(output, json)?; } } Ok(()) }