use std::env;
use std::process;
use rust_usd::{install_forge_resolver, AssetResolver, Stage};
struct LocalForgeMap;
impl AssetResolver for LocalForgeMap {
fn resolve(&self, uri: &str) -> Option<String> {
let suffix = uri.strip_prefix("forge://asset/")?;
let cwd = env::current_dir().ok()?;
let candidate = cwd.join("examples").join(format!("forge_target_{}.usda", suffix));
if candidate.exists() {
return Some(candidate.to_string_lossy().into_owned());
}
let single = cwd.join("examples/forge_target.usda");
single.exists().then(|| single.to_string_lossy().into_owned())
}
}
fn main() {
install_forge_resolver(LocalForgeMap);
let stage = Stage::open("examples/forge_demo.usda").unwrap_or_else(|e| {
eprintln!("failed to open forge_demo.usda: {}", e.what());
process::exit(1);
});
let meshes = stage.meshes();
println!(
"forge_demo.usda yielded {} mesh(es) after forge:// resolution:",
meshes.len()
);
for mesh in meshes {
println!(" {}", mesh.prim_path());
}
if stage.meshes().is_empty() {
eprintln!("no meshes — resolver may not have been wired up");
process::exit(2);
}
}