Add export command
This commit is contained in:
parent
c573f1b0b0
commit
535d7ff236
4 changed files with 20 additions and 48 deletions
|
|
@ -1,3 +1,4 @@
|
|||
pub mod export;
|
||||
pub mod ingest;
|
||||
pub mod path;
|
||||
pub mod show;
|
||||
|
|
|
|||
17
brood/src/commands/export.rs
Normal file
17
brood/src/commands/export.rs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
use std::{io, path::PathBuf};
|
||||
|
||||
use crate::data::Data;
|
||||
|
||||
#[derive(Debug, clap::Parser)]
|
||||
pub struct Cmd {
|
||||
out: PathBuf,
|
||||
}
|
||||
|
||||
impl Cmd {
|
||||
pub fn run(self, data: Data) -> io::Result<()> {
|
||||
println!(">> Export");
|
||||
data.write_to_file(&self.out)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
|
@ -1,48 +0,0 @@
|
|||
use std::fs::File;
|
||||
use std::io::{self, BufReader, BufWriter};
|
||||
use std::path::Path;
|
||||
|
||||
use crate::data::adjacency_list::AdjacencyList;
|
||||
use crate::data::store;
|
||||
|
||||
pub fn reexport(
|
||||
from: &Path,
|
||||
to: &Path,
|
||||
in_parens: Option<bool>,
|
||||
in_structure: Option<bool>,
|
||||
) -> io::Result<()> {
|
||||
eprintln!(">> Import");
|
||||
let mut from = BufReader::new(File::open(from)?);
|
||||
let mut data = store::read_adjacency_list(&mut from)?;
|
||||
|
||||
eprintln!(">> Consistency check");
|
||||
data.check_consistency();
|
||||
|
||||
if in_parens.is_some() || in_structure.is_some() {
|
||||
eprintln!(">> Filtering");
|
||||
|
||||
let mut data2 = AdjacencyList::default();
|
||||
for (page_idx, page) in data.pages() {
|
||||
data2.push_page(page.data.clone());
|
||||
for (_, link) in data.links(page_idx) {
|
||||
if in_parens.is_some_and(|v| v != link.data.in_parens()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if in_structure.is_some_and(|v| v != link.data.in_structure()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
data2.push_link(link.to, link.data);
|
||||
}
|
||||
}
|
||||
|
||||
data = data2;
|
||||
}
|
||||
|
||||
eprintln!(">> Export");
|
||||
let mut to = BufWriter::new(File::create(to)?);
|
||||
store::write_adjacency_list(&data, &mut to)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -12,6 +12,7 @@ use data::Data;
|
|||
#[derive(Debug, Parser)]
|
||||
enum Command {
|
||||
Ingest(commands::ingest::Cmd),
|
||||
Export(commands::export::Cmd),
|
||||
Show(commands::show::Cmd),
|
||||
Path(commands::path::Cmd),
|
||||
}
|
||||
|
|
@ -54,6 +55,7 @@ fn main() -> io::Result<()> {
|
|||
|
||||
match args.command {
|
||||
Command::Ingest(_) => unreachable!(),
|
||||
Command::Export(cmd) => cmd.run(data),
|
||||
Command::Show(cmd) => cmd.run(data),
|
||||
Command::Path(cmd) => cmd.run(data),
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue