use anyhow::{Context, Result as AnyResult};
use duct::cmd;
use dtt::DateTime;
use rlg::{macro_log, LogFormat, LogLevel};
use vrd::Random;
pub fn deps(package: &str) -> AnyResult<()> {
let date = DateTime::new();
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::INFO,
"Dependencies",
"Starting dependency analysis",
&LogFormat::CLF
);
drop(log);
cmd!("cargo", "bloat", "-p", package, "--crates")
.run()
.map(|_| ())
.map_err(|err| {
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::ERROR,
"Dependencies",
"Dependency analysis failed",
&LogFormat::CLF);
drop(log);
err
})
.with_context(|| format!("Failed to execute 'cargo bloat' for dependency analysis on package '{package}'"))?;
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::ERROR,
"Dependencies",
"Dependency analysis completed",
&LogFormat::CLF
);
drop(log);
Ok(())
}
pub fn time(package: &str) -> AnyResult<()> {
let date = DateTime::new();
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::ERROR,
"Time Analysis",
"Starting build time analysis",
&LogFormat::CLF
);
drop(log);
cmd!("cargo", "bloat", "-p", package, "--time")
.run()
.map(|_| ()) .map_err(|err| {
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::ERROR,
"Time Analysis",
"Build time analysis failed",
&LogFormat::CLF);
drop(log);
err
})
.with_context(|| format!("Failed to execute 'cargo bloat' for build time analysis on package '{package}'"))?;
let log = macro_log!(
&Random::default().int(0, 1_000_000_000).to_string(),
&date.iso_8601,
&LogLevel::ERROR,
"Time Analysis",
"Build time analysis completed",
&LogFormat::CLF
);
drop(log);
Ok(())
}