use clap::{Parser, Subcommand};
use spawn_access_control::{Config, Result};
use std::{path::PathBuf, fs};
use serde_json;
use tokio;
#[derive(Parser)]
#[clap(author, version, about)]
struct Cli {
#[clap(subcommand)]
command: Commands,
#[clap(long, value_parser)]
config: Option<PathBuf>,
}
#[derive(Subcommand)]
enum Commands {
Analyze {
#[clap(long)]
input: PathBuf,
#[clap(long)]
output: PathBuf,
#[clap(long)]
format: Option<String>,
},
Monitor {
#[clap(long)]
config: PathBuf,
},
Report {
#[clap(long)]
output: PathBuf,
#[clap(long)]
type_: String,
#[clap(long)]
from: Option<String>,
#[clap(long)]
to: Option<String>,
},
}
#[tokio::main]
async fn main() -> Result<()> {
let cli = Cli::parse();
let config = if let Some(config_path) = cli.config {
let contents = fs::read_to_string(config_path)?;
let config: Config = serde_json::from_str(&contents)?;
config
} else {
Config::default()
};
match cli.command {
Commands::Analyze { input, output, format } => {
analyze_command(input, output, format, &config).await?;
}
Commands::Monitor { config: monitor_config } => {
monitor_command(monitor_config, &config).await?;
}
Commands::Report { output, type_, from, to } => {
report_command(output, type_, from, to, &config).await?;
}
}
Ok(())
}
async fn analyze_command(
_input: PathBuf,
_output: PathBuf,
_format: Option<String>,
_config: &Config,
) -> Result<()> {
Ok(())
}
async fn monitor_command(
_monitor_config: PathBuf,
_config: &Config,
) -> Result<()> {
Ok(())
}
async fn report_command(
_output: PathBuf,
_type_: String,
_from: Option<String>,
_to: Option<String>,
_config: &Config,
) -> Result<()> {
Ok(())
}