pub use canic_core::shared_support::format::{byte_size, cycles_tc};
#[must_use]
pub fn wasm_size_label(wasm_bytes: Option<u64>, gzip_bytes: Option<u64>) -> String {
match (wasm_bytes, gzip_bytes) {
(Some(wasm), Some(gzip)) => format!("{} (gz {})", byte_size(wasm), byte_size(gzip)),
(Some(wasm), None) => byte_size(wasm),
(None, Some(gzip)) => format!("n/a (gz {})", byte_size(gzip)),
(None, None) => "-".to_string(),
}
}
#[must_use]
pub fn compact_duration(seconds: u64) -> String {
const MINUTE: u64 = 60;
const HOUR: u64 = 60 * MINUTE;
const DAY: u64 = 24 * HOUR;
const WEEK: u64 = 7 * DAY;
match seconds {
0 => "0s".to_string(),
1..MINUTE => format!("{seconds}s"),
MINUTE..HOUR => compact_duration_pair(seconds, MINUTE, "m", 1, "s"),
HOUR..DAY => compact_duration_pair(seconds, HOUR, "h", MINUTE, "m"),
DAY..WEEK => compact_duration_pair(seconds, DAY, "d", HOUR, "h"),
_ => compact_duration_pair(seconds, WEEK, "w", DAY, "d"),
}
}
fn compact_duration_pair(
seconds: u64,
major_seconds: u64,
major_unit: &str,
minor_seconds: u64,
minor_unit: &str,
) -> String {
let major = seconds / major_seconds;
let minor = (seconds % major_seconds) / minor_seconds;
if minor == 0 {
format!("{major}{major_unit}")
} else {
format!("{major}{major_unit} {minor}{minor_unit}")
}
}
#[cfg(test)]
mod tests;