use anyhow::Result; use std::path::{Path, PathBuf}; use structopt::StructOpt; use subplot::Document; #[derive(Debug, StructOpt)] #[structopt(name = "sp-meta", about = "Show Subplot document metadata.")] struct Opt { // Input filename. #[structopt(parse(from_os_str))] filename: PathBuf, } fn main() -> Result<()> { let opt = Opt::from_args(); let basedir = subplot::get_basedir_from(&opt.filename)?; let mut doc = Document::from_file(&basedir, &opt.filename)?; for filename in doc.sources() { println!("source: {}", filename.display()); } println!("title: {}", doc.meta().title()); println!("bindings: {}", filename(doc.meta().bindings_filename())); println!("functions: {}", filename(doc.meta().functions_filename())); for bib in doc.meta().bibliographies().iter() { println!("bibliography: {}", filename(Some(bib))); } for scen in doc.scenarios()? { println!("scenario {}", scen.title()); } Ok(()) } fn filename(name: Option<&Path>) -> String { let path = match name { None => return "".to_string(), Some(x) => x, }; match path.to_str() { None => "non-UTF8 filename".to_string(), Some(x) => x.to_string(), } }