From 50a3398ad9957d3d0ec733f2e332a6c2bb17d678 Mon Sep 17 00:00:00 2001 From: Kiyomichi Kosaka Date: Sat, 3 Dec 2022 11:43:48 +0000 Subject: [PATCH] Move LK structure into own file. --- src/lk.rs | 38 ++++++++++++++++++++++++++++++++++++++ src/main.rs | 3 ++- src/repl.rs | 3 ++- src/structs.rs | 36 ------------------------------------ 4 files changed, 42 insertions(+), 38 deletions(-) create mode 100644 src/lk.rs diff --git a/src/lk.rs b/src/lk.rs new file mode 100644 index 0000000..26553f4 --- /dev/null +++ b/src/lk.rs @@ -0,0 +1,38 @@ +use std::{cell::RefCell, rc::Rc}; +use std::collections::HashMap; +use regex::{Regex, Captures}; +use crate::structs::Password; + +#[derive(PartialEq, Debug)] +pub struct LK { + pub db: HashMap, Rc>>, +} + +impl LK { + pub fn fix_hierarchy(&self) { + lazy_static! { + static ref RE: Regex = Regex::new(r"\s*\^([!-~]+)").unwrap(); + } + for (_, name) in &self.db { + if name.borrow().comment.is_some() { + let mut folder: Option = None; + let prev_comment = name.borrow().comment.as_ref().unwrap().clone(); + let comment = RE.replace(prev_comment.as_str(), |c: &Captures| { folder = Some(c[1].to_string()); "" }); + if folder.is_some() { + let folder_name = folder.unwrap(); + for (_, entry) in &self.db { + if *entry.borrow().name == *folder_name { + { + let mut tmp = name.borrow_mut(); + tmp.parent = Some(entry.clone()); + if comment.len() == 0 { tmp.comment = None } + else { tmp.comment = Some(comment.to_string()) } + } + break; + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 4537e5d..c787ac0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,13 +4,14 @@ extern crate lazy_static; mod structs; mod parser; mod repl; +mod lk; use std::{cell::RefCell, rc::Rc}; use std::collections::HashMap; use rustyline::Editor; -use crate::structs::LK; +use crate::lk::LK; use crate::repl::LKRead; pub fn main() { diff --git a/src/repl.rs b/src/repl.rs index a95d3bc..19a3501 100644 --- a/src/repl.rs +++ b/src/repl.rs @@ -2,7 +2,8 @@ use rustyline::Editor; use std::{cell::RefCell, rc::Rc}; use home::home_dir; -use crate::structs::{LKErr, Command, LK}; +use crate::lk::LK; +use crate::structs::{LKErr, Command}; use crate::parser::command_parser; #[derive(Debug)] diff --git a/src/structs.rs b/src/structs.rs index 23a7956..399ebe1 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -1,6 +1,4 @@ use std::{cell::RefCell, rc::Rc}; -use std::collections::HashMap; -use regex::{Regex, Captures}; use chrono::naive::NaiveDate; #[derive(thiserror::Error, Debug, PartialEq)] @@ -48,11 +46,6 @@ pub enum Command<'a> { Quit } -#[derive(PartialEq, Debug)] -pub struct LK { - pub db: HashMap, Rc>>, -} - impl std::fmt::Display for Mode { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { write!(f, "{}", match self { @@ -78,32 +71,3 @@ impl std::string::ToString for Password { format!("{}{} {}{} {} {}{}{}", prefix, self.name, length, self.mode, self.seq, self.date, comment, parent) } } - -impl LK { - pub fn fix_hierarchy(&self) { - lazy_static! { - static ref RE: Regex = Regex::new(r"\s*\^([!-~]+)").unwrap(); - } - for (_, name) in &self.db { - if name.borrow().comment.is_some() { - let mut folder: Option = None; - let prev_comment = name.borrow().comment.as_ref().unwrap().clone(); - let comment = RE.replace(prev_comment.as_str(), |c: &Captures| { folder = Some(c[1].to_string()); "" }); - if folder.is_some() { - let folder_name = folder.unwrap(); - for (_, entry) in &self.db { - if *entry.borrow().name == *folder_name { - { - let mut tmp = name.borrow_mut(); - tmp.parent = Some(entry.clone()); - if comment.len() == 0 { tmp.comment = None } - else { tmp.comment = Some(comment.to_string()) } - } - break; - } - } - } - } - } - } -} \ No newline at end of file