diff --git a/src/db.rs b/src/db.rs index 6728edc..2f0b2e8 100644 --- a/src/db.rs +++ b/src/db.rs @@ -12,9 +12,9 @@ use std::fmt; use std::cmp::{PartialEq, Ordering}; -static STORAGE_FOLDER: String = "storage"; +static STORAGE_FOLDER: Lazy = Lazy::new(|| "storage".to_string() ); static STORAGE_PATH: Lazy = Lazy::new(|| { - format!("{}/db.mps", STORAGE_FOLDER) + format!("{}/db.mps", &*STORAGE_FOLDER) }); @@ -93,16 +93,15 @@ impl Encoder { pub struct DB { pub items: HashSet::, - path: String, encoder: Encoder } impl DB { // TODO: make path as String too - pub fn new(path: &str, password: String) -> io::Result { + pub fn new(password: String) -> io::Result { let encoder = Encoder::from(password); // TODO: throw error is password is incorrect - let file = fs::File::open(path)?; + let file = fs::File::open(&*STORAGE_PATH)?; let reader = io::BufReader::new(file); let mut items = HashSet::::new(); let mut id: Option = None; @@ -124,14 +123,14 @@ impl DB { } let result = DB { items: items, - path: String::from(path), encoder: encoder }; Ok(result) } - pub fn init(passphrase: String) -> io::Result<()> { - fs::create_dir(STORAGE_FOLDER)?; + pub fn init(_passphrase: String) -> io::Result<()> { + // TODO: use pasphrase + fs::create_dir(&*STORAGE_FOLDER)?; println!("Storage folder created"); //let mut db = DB::init(&*STORAGE_PATH, pass)?; @@ -139,13 +138,20 @@ impl DB { println!("Storage db created."); println!("Initialization complete."); println!(""); - println!("Now it's required to add folder `{}` under git manually.", STORAGE_FOLDER); + println!("Now it's required to add folder `{}` under git manually.", &*STORAGE_FOLDER); println!("Don't worry it's going to be encrypted."); + Ok(()) + } + pub fn print_init_hint() { + println!("mps can work only when storage inited."); + println!("Hint: you can restore your storage if you have it already:"); + println!(" git clone {}", &*STORAGE_FOLDER); + println!("to init manually your storage and config") } pub fn is_inited() -> bool { - let path = Path::new(STORAGE_FOLDER); + let path = Path::new(&*STORAGE_FOLDER); return path.exists(); } @@ -158,7 +164,7 @@ impl DB { let mut file = fs::OpenOptions::new() .write(true) .append(false) - .open(&self.path)?; + .open(&*STORAGE_PATH)?; for item in self.items.iter() { writeln!(file, "{}", item.id)?; diff --git a/src/main.rs b/src/main.rs index 6fd7c5a..9872ed0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,6 @@ use db::{DB, Item}; use clap::{Parser, Subcommand}; use rpassword; -use std::fs; use std::io::{self, Write}; use std::process; @@ -90,7 +89,7 @@ fn init() -> io::Result<()> { return Err(io::Error::new(io::ErrorKind::InvalidInput, "Passwords must be equal")); } - db:::DB::init(password)?; + db::DB::init(password)?; Ok(()) } @@ -139,15 +138,11 @@ fn run_command() -> io::Result<()> { if !db::DB::is_inited() { match get_prompt("Do you want to init your storage?")? { PROMPT::YES => init()?, - PROMPT::NO => { - println!("mps can work only when storage inited."); - println!("Hint: you can restore your storage if you have it already:"); - println!(" git clone {}", STORAGE_FOLDER); - println!("to init manually your storage and config") - }, + PROMPT::NO => db::DB::print_init_hint(), } } else { login()?; + // TODO: list() } } }