runtime_compile/
runtime_compile.rs1use ferrocat::{
2 CompileCatalogArtifactOptions, NormalizedParsedCatalog, ParseCatalogOptions,
3 compile_catalog_artifact, parse_catalog,
4};
5
6fn catalog(
7 content: &str,
8 locale: &str,
9) -> Result<NormalizedParsedCatalog, Box<dyn std::error::Error>> {
10 Ok(
11 parse_catalog(ParseCatalogOptions::new(content, "en").with_locale(locale))?
12 .into_normalized_view()?,
13 )
14}
15
16fn main() -> Result<(), Box<dyn std::error::Error>> {
17 let source = catalog(
18 "msgid \"Checkout\"\nmsgstr \"Checkout\"\n\nmsgid \"Cart\"\nmsgstr \"Cart\"\n",
19 "en",
20 )?;
21 let german = catalog("msgid \"Checkout\"\nmsgstr \"Zur Kasse\"\n", "de")?;
22
23 let options = CompileCatalogArtifactOptions::new("de", "en").with_source_fallback(true);
24 let artifact = compile_catalog_artifact(&[&source, &german], &options)?;
25
26 assert_eq!(artifact.messages.len(), 2);
27 assert_eq!(artifact.missing.len(), 1);
28 assert!(artifact.messages.values().any(|value| value == "Zur Kasse"));
29 assert!(artifact.messages.values().any(|value| value == "Cart"));
30
31 for (key, value) in &artifact.messages {
32 println!("{key} = {value}");
33 }
34
35 Ok(())
36}