rust-usd 0.0.4

Rust bindings to OpenUSD (pxr C++): stage open, prim/mesh attrs, variants, sublayer authoring, UsdShade read+write, ArResolver hook.
use std::env;
use std::process;

use rust_usd::{InitialLoadSet, Stage};

fn main() {
    let path = env::args().nth(1).unwrap_or_else(|| {
        eprintln!("usage: payload_control <path-to-usd-file-with-payloads>");
        process::exit(2);
    });

    let load_all = open(&path, InitialLoadSet::All);
    let load_none = open(&path, InitialLoadSet::None);

    println!("InitialLoadSet=All:  {} mesh(es)", load_all.meshes().len());
    println!("InitialLoadSet=None: {} mesh(es)", load_none.meshes().len());

    let payload_path = env::args().nth(2);
    if let Some(target) = payload_path {
        load_none.load(&target);
        println!(
            "after load({}): {} mesh(es)",
            target,
            load_none.meshes().len()
        );

        load_none.unload(&target);
        println!(
            "after unload({}): {} mesh(es)",
            target,
            load_none.meshes().len()
        );
    } else {
        println!("(pass an SDF path as a second arg to demo load/unload)");
    }
}

fn open(path: &str, load: InitialLoadSet) -> Stage {
    Stage::open_with_load_set(path, load).unwrap_or_else(|e| {
        eprintln!("failed to open {}: {}", path, e.what());
        process::exit(1);
    })
}