Skip to main content

release_audit/
release_audit.rs

1use ferrocat::{CatalogAuditOptions, NormalizedParsedCatalog, ParseCatalogOptions, audit_catalogs};
2
3fn catalog(
4    content: &str,
5    locale: &str,
6) -> Result<NormalizedParsedCatalog, Box<dyn std::error::Error>> {
7    Ok(
8        ferrocat::parse_catalog(ParseCatalogOptions::new(content, "en").with_locale(locale))?
9            .into_normalized_view()?,
10    )
11}
12
13fn main() -> Result<(), Box<dyn std::error::Error>> {
14    let source = catalog("msgid \"Checkout\"\nmsgstr \"Checkout\"\n", "en")?;
15    let target = catalog("msgid \"Checkout\"\nmsgstr \"\"\n", "de")?;
16
17    let report = audit_catalogs(&[&source, &target], &CatalogAuditOptions::new("en"))?;
18
19    assert!(report.has_errors());
20    assert!(
21        report
22            .diagnostics
23            .iter()
24            .any(|diagnostic| diagnostic.code == "catalog.empty_translation")
25    );
26
27    for diagnostic in &report.diagnostics {
28        println!("{}: {}", diagnostic.code, diagnostic.message);
29    }
30
31    Ok(())
32}