alef 0.78.0

Opinionated polyglot binding generator for Rust libraries
Documentation
use crate::e2e::snippets::SnippetCoverageLedger;
use anyhow::{Context, Result};
use std::path::Path;

pub(super) fn read_coverage_manifest(path: &Path) -> Result<SnippetCoverageLedger> {
    let content = std::fs::read_to_string(path)
        .with_context(|| format!("failed to read snippet coverage manifest {}", path.display()))?;
    serde_json::from_str(&content)
        .with_context(|| format!("failed to parse snippet coverage manifest {}", path.display()))
}

#[cfg(test)]
mod tests {
    use super::*;
    use crate::e2e::snippets::{MissingSnippet, SnippetCoverageKey};

    #[test]
    fn round_trip_preserves_missing_ledger() {
        let directory = tempfile::tempdir().expect("temporary directory");
        let path = directory.path().join("coverage.json");
        let coverage = SnippetCoverageLedger {
            expected: vec![SnippetCoverageKey {
                fixture_id: "sample_request".into(),
                language: "swift".into(),
            }],
            missing: vec![MissingSnippet {
                key: SnippetCoverageKey {
                    fixture_id: "sample_request".into(),
                    language: "swift".into(),
                },
                reason: "sample renderer is unavailable".into(),
            }],
            ..SnippetCoverageLedger::default()
        };
        std::fs::write(
            &path,
            serde_json::to_string_pretty(&coverage).expect("serialize coverage"),
        )
        .expect("write coverage");

        let loaded = read_coverage_manifest(&path).expect("read coverage");

        assert_eq!(loaded, coverage);
    }
}