//! Prints the build model of a folder, optionally after a sync:
//! `cargo run -p ide-build --example model --
[cache-dir] [maven|gradle]`.
fn main() {
let mut args = std::env::args().skip(1);
let root = std::path::PathBuf::from(args.next().unwrap_or_else(|| ".".into()));
let cache =
args.next().map(std::path::PathBuf::from).unwrap_or_else(|| std::env::temp_dir().join("ide-build-model"));
let cancel = ide_core::CancellationToken::new();
let progress = |p: ide_build::SyncProgress| eprintln!(" {} {:?}", p.message, p.fraction);
let options = ide_build::SyncOptions::default();
let started = std::time::Instant::now();
let synced = match args.next().as_deref() {
Some("maven") => Some(ide_build::sync_maven(&root, &cache, &options, &cancel, &progress)),
Some("gradle") => Some(ide_build::sync_gradle(&root, &cache, &options, &cancel, &progress)),
_ => None,
};
if let Some(r) = synced {
eprintln!("synced in {:?}: {r:?}", started.elapsed());
}
let started = std::time::Instant::now();
let model = ide_build::load(&root, &cache, None);
println!("{}", serde_json::to_string_pretty(&model).unwrap());
eprintln!("loaded in {:?}", started.elapsed());
}