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::{Prim, Stage};

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

    let stage = match Stage::open(&path) {
        Ok(s) => s,
        Err(e) => {
            eprintln!("failed to open stage: {}", e.what());
            process::exit(1);
        }
    };

    println!("opened {}", path);
    print_tree(&stage.pseudo_root(), 0);
}

fn print_tree(prim: &Prim, depth: usize) {
    let indent = "  ".repeat(depth);
    let type_name = prim.type_name();
    let label = if type_name.is_empty() {
        String::new()
    } else {
        format!(" [{}]", type_name)
    };
    println!("{}{}{}", indent, prim.path(), label);
    for child in prim.children() {
        print_tree(&child, depth + 1);
    }
}