logicpearl-render 0.1.0

Rendering helpers for LogicPearl artifacts and verification status.
Documentation
use logicpearl_core::{ArtifactRenderer, Result};
use logicpearl_ir::{LogicPearlGateIr, RuleVerificationStatus};

pub struct TextInspector;

impl ArtifactRenderer<LogicPearlGateIr> for TextInspector {
    fn render(&self, gate: &LogicPearlGateIr) -> Result<String> {
        let mut lines = vec![
            format!("Gate ID: {}", gate.gate_id),
            format!("IR version: {}", gate.ir_version),
            format!("Features: {}", gate.input_schema.features.len()),
            format!("Rules: {}", gate.rules.len()),
        ];
        if let Some(verification) = &gate.verification {
            if let Some(scope) = &verification.correctness_scope {
                lines.push(format!("Correctness scope: {scope}"));
            }
        }
        lines.push("Rule details:".to_string());
        for rule in &gate.rules {
            let status = match &rule.verification_status {
                Some(RuleVerificationStatus::Z3Verified) => "z3_verified",
                Some(RuleVerificationStatus::PipelineUnverified) => "pipeline_unverified",
                Some(RuleVerificationStatus::HeuristicUnverified) => "heuristic_unverified",
                Some(RuleVerificationStatus::RefinedUnverified) => "refined_unverified",
                None => "unknown",
            };
            lines.push(format!("  bit {}: {} [{}]", rule.bit, rule.id, status));
        }
        Ok(lines.join("\n"))
    }
}