zoxide/src/cmd/export.rs

39 lines
1.1 KiB
Rust

use std::io::{self, Write};
use serde_json::to_writer_pretty;
use crate::cmd::{Export, ExportCommand, Run};
use crate::db::Database;
use crate::error::BrokenPipeHandler;
impl Run for Export {
fn run(&self) -> anyhow::Result<()> {
let db = Database::open()?;
let dirs = db.dirs();
let out = &mut io::stdout().lock();
match &self.cmd {
ExportCommand::Csv => {
writeln!(out, "path,rank,last_accessed").pipe_exit("stdout")?;
for dir in dirs {
writeln!(out, "{},{},{}", dir.path, dir.rank, dir.last_accessed)
.pipe_exit("stdout")?;
}
}
ExportCommand::Json => {
to_writer_pretty(&mut *out, dirs)?;
writeln!(out).pipe_exit("stdout")?;
}
ExportCommand::Text => {
for dir in dirs {
writeln!(out, "{}|{}|{}", dir.path, dir.rank, dir.last_accessed)
.pipe_exit("stdout")?;
}
}
}
Ok(())
}
}