Files
karaolidis edfb8e39b6
Build and Release Binary / build (push) Successful in 10m13s
Build and Release Binary / release (push) Successful in 7m34s
feat: add Fuji Modelling Language codegen
Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
2026-05-25 10:42:12 +00:00

34 lines
996 B
Rust

use std::{path::PathBuf, process::Command, str};
use anyhow::bail;
fn main() -> anyhow::Result<()> {
println!("cargo:rerun-if-changed=fml/");
println!("cargo:rerun-if-changed=crates/codegen/");
let manifest = PathBuf::from(
std::env::var_os("CARGO_MANIFEST_DIR").expect("CARGO_MANIFEST_DIR must be set by cargo"),
);
let generated = manifest.join("src").join("lib").join("generated");
let cue = Command::new("cue")
.args(["export", "./fml", "--out", "json"])
.current_dir(&manifest)
.output()
.map_err(|err| {
anyhow::anyhow!("failed to invoke `cue export`: {err}. Install CUE (https://cuelang.org) or run inside `nix develop`.")
})?;
if !cue.status.success() {
bail!(
"`cue export ./fml --out json` failed:\n{}",
String::from_utf8_lossy(&cue.stderr),
);
}
let json = str::from_utf8(&cue.stdout)?;
codegen::generate(json, &generated)?;
Ok(())
}