use crate::{
sns::report::SnsProposalsCacheListReport,
table::{ColumnAlign, render_table},
};
pub fn sns_proposals_cache_list_report_text(report: &SnsProposalsCacheListReport) -> String {
let mut lines = vec![
format!("network: {}", report.network),
format!("cache_root: {}", report.cache_root),
format!("cache_count: {}", report.cache_count),
];
if !report.caches.is_empty() {
lines.push(String::new());
lines.push(render_table(
&[
"STATUS",
"ID",
"NAME",
"ROOT",
"ROWS",
"PAGES",
"FETCHED_AT",
],
&report
.caches
.iter()
.map(|cache| {
[
cache.cache_status.clone(),
cache.id.to_string(),
cache.name.clone(),
cache.root_canister_id.clone(),
cache.row_count.to_string(),
cache.page_count.to_string(),
cache.fetched_at.clone(),
]
})
.collect::<Vec<_>>(),
&[
ColumnAlign::Left,
ColumnAlign::Right,
ColumnAlign::Left,
ColumnAlign::Left,
ColumnAlign::Right,
ColumnAlign::Right,
ColumnAlign::Left,
],
));
for cache in &report.caches {
if let Some(error) = cache.cache_error.as_ref() {
lines.push(format!("cache_error: {}: {error}", cache.cache_path));
}
}
}
lines.join("\n")
}