use clap;
use common::*;
use entry;
use std::fs::OpenOptions;
use std::path::PathBuf;
pub fn run(path: PathBuf, place: &str) -> Result<(), clap::Error> {
let mut file = OpenOptions::new()
.read(true)
.write(true)
.open(&path)
.map_err(|e| read_error(&path, e))?;
let mut data = decode(&file, &path)?;
let password = entry::new_password();
let res = unlock(&mut data, |mut unlocked| {
unlocked.set(place.to_owned(), password)
});
match res {
Ok(existed) => {
save(&mut file, &path, &data)?;
if existed {
println!("Updated entry for `{}`.", place);
} else {
println!("Created entry for `{}`.", place);
}
Ok(())
}
Err(e) => Err(write_error(&path, e))
}
}