krab_cli 0.2.0

The `krab` CLI: dev workflow, generators, governance, and release operations for the Krab framework
use anyhow::Result;

use crate::release_ops::{
    run_contract_checks, run_db_drift_check, run_db_lifecycle_check, run_db_rollback_check,
    run_db_rollback_rehearsal, run_dependency_gate, run_protocol_contract_checks,
    run_release_certify, run_release_check,
};
use crate::{ContractAction, DbAction, ReleaseAction, SecurityAction};

pub(super) fn dispatch_contract_action(action: &ContractAction) -> Result<()> {
    match action {
        ContractAction::Check { diagnostics } => run_contract_checks(*diagnostics),
        ContractAction::ProtocolCheck { diagnostics } => run_protocol_contract_checks(*diagnostics),
    }
}

pub(super) fn dispatch_db_action(action: &DbAction) -> Result<()> {
    match action {
        DbAction::Lifecycle { diagnostics } => run_db_lifecycle_check(*diagnostics),
        DbAction::Rollback { diagnostics } => run_db_rollback_check(*diagnostics),
        DbAction::Drift { diagnostics } => run_db_drift_check(*diagnostics),
        DbAction::Rehearsal { out, diagnostics } => run_db_rollback_rehearsal(out, *diagnostics),
    }
}

pub(super) fn dispatch_security_action(action: &SecurityAction) -> Result<()> {
    match action {
        SecurityAction::DependencyGate { diagnostics } => run_dependency_gate(*diagnostics),
    }
}

pub(super) fn dispatch_release_action(action: &ReleaseAction) -> Result<()> {
    match action {
        ReleaseAction::Check { diagnostics, json } => run_release_check(*diagnostics, *json),
        ReleaseAction::Certify {
            out,
            diagnostics,
            json,
        } => run_release_certify(out, *diagnostics, *json),
    }
}