use std::io::stdout;
use std::io::Write;
use std::ops::Deref;
use anyhow::Result;
use chrono_humanize::HumanTime;
use prettytable::{cell, format::consts::FORMAT_CLEAN, Row, Table};
use crate::TrashInfo;
pub fn print_files_list<I, F>(files: F, with_index: bool) -> Result<()>
where
I: Deref<Target = TrashInfo>,
F: Iterator<Item = I>,
{
print_files_list_to(files, with_index, stdout())
}
pub fn print_files_list_to<I, F, W>(
files: F,
with_index: bool,
mut writer: W,
) -> Result<()>
where
I: Deref<Target = TrashInfo>,
F: Iterator<Item = I>,
W: Write,
{
let mut table = Table::new();
table.set_format(*FORMAT_CLEAN);
for (i, info) in files.enumerate() {
let mut row = Row::empty();
if with_index {
row.add_cell(cell!(format!("[{}]", i)));
}
row.add_cell(cell!(info.deletion_date));
row.add_cell(cell!(HumanTime::from(info.deletion_date)));
row.add_cell(cell!(info.path.to_string_lossy()));
table.add_row(row);
}
table.print(&mut writer)?;
Ok(())
}
pub fn print_files_list_json<I, F>(files: F) -> Result<()>
where
I: Deref<Target = TrashInfo>,
F: Iterator<Item = I>,
{
print_files_list_json_to(files, stdout())
}
pub fn print_files_list_json_to<I, F, W>(files: F, writer: W) -> Result<()>
where
I: Deref<Target = TrashInfo>,
F: Iterator<Item = I>,
W: Write,
{
let files: Vec<_> = files.collect(); let files: Vec<_> = files.iter().map(Deref::deref).collect();
serde_json::to_writer(writer, &files)?;
Ok(())
}