From 49b0df8bb9c7f888354e6b29c7a1247b6799c7fe Mon Sep 17 00:00:00 2001 From: markxoe Date: Tue, 4 Jun 2024 16:15:57 +0200 Subject: [PATCH] wip: improve database --- src/commands/derive_db.rs | 5 +++-- src/commands/interactive.rs | 4 ++-- src/data/database.rs | 32 +++++++++++++++----------------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/src/commands/derive_db.rs b/src/commands/derive_db.rs index 0e1d9e8..408cc12 100644 --- a/src/commands/derive_db.rs +++ b/src/commands/derive_db.rs @@ -3,7 +3,7 @@ use log::info; use crate::{ data::{ - database, + database::Database, maps::{link_map::LinkMap, page_map::PageMap}, parsers::{links, pages, redirects}, }, @@ -112,7 +112,8 @@ fn derive_db_command(args: DeriveDbArgs) { .with_finish_message("Serialized and written to file") .build(); spinner.enable_background(); - database::serialize(output.as_str(), &links, &lookup); + Database::new(links, lookup).to_file(output.as_str()); + spinner.finish(); } } diff --git a/src/commands/interactive.rs b/src/commands/interactive.rs index 4ce7190..d873ce1 100644 --- a/src/commands/interactive.rs +++ b/src/commands/interactive.rs @@ -3,7 +3,7 @@ use clap::Args; use crate::{ data::{ algorithm::bfs, - database, + database::Database, maps::page_map::{PageMap, PageMapResult}, }, indication::ProgressBuilder, @@ -31,7 +31,7 @@ fn interactive_cmd(args: &InteractiveArgs) { .with_message("📝 Deserializing DB") .build(); spinner.enable_background(); - let data = database::deserialize(&db); + let data = Database::from_file(&db); spinner.finish(); println!( diff --git a/src/data/database.rs b/src/data/database.rs index 7f9d0be..3be2605 100644 --- a/src/data/database.rs +++ b/src/data/database.rs @@ -2,30 +2,28 @@ use serde::{Deserialize, Serialize}; use crate::data::maps::{link_map::LinkMap, page_map::PageMap}; -#[derive(Serialize)] -struct SerializerDatabase<'a> { - pub links: &'a LinkMap, - pub pages: &'a PageMap, -} - -#[derive(Deserialize)] +#[derive(Serialize, Deserialize)] pub struct Database { pub links: LinkMap, pub pages: PageMap, } -pub fn serialize(outfile: &str, links: &LinkMap, pages: &PageMap) { - let db = SerializerDatabase { links, pages }; +impl Database { + pub fn new(links: LinkMap, pages: PageMap) -> Self { + Self { links, pages } + } - let file = std::fs::File::create(outfile).unwrap(); - let writer = std::io::BufWriter::new(file); + pub fn to_file(&self, outfile: &str) { + let file = std::fs::File::create(outfile).unwrap(); + let writer = std::io::BufWriter::new(file); - ciborium::into_writer(&db, writer).expect("Error writing db"); -} + ciborium::into_writer(self, writer).expect("Error writing db"); + } -pub fn deserialize(infile: &str) -> Database { - let file = std::fs::File::open(infile).unwrap(); - let reader = std::io::BufReader::new(file); + pub fn from_file(infile: &str) -> Database { + let file = std::fs::File::open(infile).unwrap(); + let reader = std::io::BufReader::new(file); - ciborium::from_reader(reader).expect("Error reading db") + ciborium::from_reader(reader).expect("Error reading db") + } }