1#![doc = include_str!("../README.md")]
2#![allow(clippy::needless_doctest_main)]
3
4use es_fluent_shared::resource::{
5 FALLBACK_CATALOG_ENV, FALLBACK_CATALOG_FILE_NAME, INVENTORY_RUNNER_ENV,
6};
7use es_fluent_toml::ResolvedI18nLayout;
8use std::path::{Path, PathBuf};
9
10mod catalog;
11
12pub use catalog::validate_sparse_catalog_inputs;
13use catalog::write_fallback_catalog;
14
15#[allow(clippy::needless_doctest_main)]
16pub fn track_i18n_assets() {
30 let manifest_dir = std::env::var("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR must be set");
31 let package_name = std::env::var("CARGO_PKG_NAME").expect("CARGO_PKG_NAME must be set");
32 let out_dir = std::env::var_os("OUT_DIR")
33 .map(PathBuf::from)
34 .expect("OUT_DIR must be set");
35 let layout = ResolvedI18nLayout::from_manifest_dir(Path::new(&manifest_dir))
36 .expect("Failed to read i18n.toml configuration");
37
38 let catalog_path = out_dir.join(FALLBACK_CATALOG_FILE_NAME);
39 println!("cargo:rerun-if-changed={}", layout.config_path.display());
40 println!("cargo:rerun-if-changed={}", layout.assets_dir.display());
41 println!("cargo:rerun-if-env-changed={INVENTORY_RUNNER_ENV}");
42 println!(
43 "cargo:rustc-env={FALLBACK_CATALOG_ENV}={}",
44 catalog_path.display()
45 );
46
47 if std::env::var_os(INVENTORY_RUNNER_ENV).is_some() {
48 std::fs::write(&catalog_path, b"")
49 .expect("Failed to initialize fallback Fluent message catalog");
50 return;
51 }
52
53 write_fallback_catalog(&layout, &package_name, &out_dir)
54 .expect("Failed to build fallback Fluent message catalog");
55}
56
57#[cfg(test)]
58mod tests;