whyno-cli 0.5.0

Linux permission debugger
//! Output formatting dispatch — checklist (default), json, explain.

pub(crate) mod checklist;
pub(crate) mod explain;
pub(crate) mod json;

mod layer_name;

use std::io::Write;

use whyno_core::checks::CheckReport;
use whyno_core::fix::FixPlan;
use whyno_core::state::SystemState;

use crate::error::OutputError;

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum OutputMode {
    /// Human-readable `[PASS]`/`[FAIL]`/`[SKIP]` checklist.
    Checklist,
    /// Structured JSON (schema v1).
    Json,
    /// Verbose resolution chain for debugging.
    Explain,
}

/// Writes to `writer` rather than stdout for testability.
pub fn render(
    report: &CheckReport,
    plan: &FixPlan,
    state: &SystemState,
    mode: OutputMode,
    writer: &mut dyn Write,
) -> Result<(), OutputError> {
    match mode {
        OutputMode::Checklist => checklist::render(report, plan, state, writer),
        OutputMode::Json => json::render(report, plan, state, writer),
        OutputMode::Explain => explain::render(report, plan, state, writer),
    }
}