rustauth-cli 0.2.0

Command-line tools for RustAuth.
Documentation
use crate::app::{AppContext, AppError, DiagnosticArgs};
use crate::diagnostics::{doctor, DiagnosticReport, Severity};
use crate::output::print_json;

pub async fn run(context: &AppContext, args: DiagnosticArgs) -> Result<(), AppError> {
    let (config, config_loaded) = context.load_config_or_default()?;
    let report = doctor(context.cwd(), &config, args.production, config_loaded).await;
    if args.json {
        print_json(&report)?;
    } else {
        print_report(&report);
    }
    if report.has_errors() || (args.strict && report.has_warnings()) {
        return Err(AppError::SilentExit { code: 1 });
    }
    Ok(())
}

pub(crate) fn print_report(report: &DiagnosticReport) {
    println!("RustAuth doctor");
    println!("Rust: {}", report.rust);
    println!("Cargo: {}", report.cargo);
    println!("RustAuth: {}", report.rustauth_version);
    if let Some(root) = &report.workspace_root {
        println!("Workspace: {root}");
    }
    if let Some(package) = &report.target_package {
        println!("Package: {package}");
    }
    for finding in &report.findings {
        let label = match finding.severity {
            Severity::Info => "INFO",
            Severity::Warn => "WARN",
            Severity::Error => "ERROR",
        };
        println!("[{label}] {}: {}", finding.code, finding.message);
    }
}