Browse Source

resolve item_id

main
Coin de Gamma 3 months ago
parent
commit
c3c5a9c11a
  1. 88
      src/main.rs

88
src/main.rs

@ -171,27 +171,15 @@ impl MPS {
Ok(()) Ok(())
} }
/// Show item. Id must exists
fn show(&mut self, id: &String) -> io::Result<()> { fn show(&mut self, id: &String) -> io::Result<()> {
self.login()?; self.login()?;
let st = self.storage.as_ref().unwrap(); let st = self.storage.as_ref().unwrap();
if !st.contains(id) {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!("Can`t find id: {}", id)
));
}
let item = st.get(id); let item = st.get(id);
editor::open_to_show(&item.content)?; editor::open_to_show(&item.content)?;
Ok(()) Ok(())
} }
fn show_by_number(&mut self, number: u32) -> io::Result<()> {
self.login()?;
let st = self.storage.as_ref().unwrap();
let id = st.get_id_by_number(number)?;
self.show(&id)
}
fn add(&mut self, id: &String) -> io::Result<()> { fn add(&mut self, id: &String) -> io::Result<()> {
self.login()?; self.login()?;
let st = self.storage.as_mut().unwrap(); let st = self.storage.as_mut().unwrap();
@ -212,6 +200,7 @@ impl MPS {
Ok(()) Ok(())
} }
/// Edit item, id need not to exist
fn edit(&mut self, id: &String) -> io::Result<()> { fn edit(&mut self, id: &String) -> io::Result<()> {
self.login()?; self.login()?;
let st = self.storage.as_mut().unwrap(); let st = self.storage.as_mut().unwrap();
@ -233,35 +222,46 @@ impl MPS {
Ok(()) Ok(())
} }
fn edit_by_number(&mut self, number: u32) -> io::Result<()> { // Delete item by id, is must exist
fn delete(&mut self, id: &String) -> io::Result<()> {
self.login()?; self.login()?;
let st = self.storage.as_mut().unwrap(); let st = self.storage.as_mut().unwrap();
let id = st.get_id_by_number(number)?; st.remove(id);
self.edit(&id) st.dump()?;
Ok(())
} }
fn delete(&mut self, id: &String) -> io::Result<()> { /// Resolve id by ItemArgs.
/// # Arguments
/// * `args` - arguments to parse
/// * `check` - check that id existing
fn item_id_by_item_id_args(&mut self, args: &ItemIdArgs, check: bool) -> io::Result<String> {
self.login()?; self.login()?;
let st = self.storage.as_mut().unwrap(); let st = self.storage.as_mut().unwrap();
if !st.contains(id) { let mut item_id: String = "NOT_INITIALIZED".to_string();
if let Some(id) = &args.id {
item_id = id.clone();
if check && !st.contains(&id) {
return Err(io::Error::new( return Err(io::Error::new(
io::ErrorKind::InvalidInput, io::ErrorKind::InvalidInput,
"No such item" format!("No such item {}", id)
)); ));
} }
st.remove(id);
st.dump()?;
Ok(())
} }
if let Some(number) = &args.number {
fn delete_by_number(&mut self, number: u32) -> io::Result<()> { item_id = st.get_id_by_number(*number)?;
self.login()?; // we can guarantee that id exists because we take it by id
let st = self.storage.as_mut().unwrap();
let id = st.get_id_by_number(number)?;
self.delete(&id)
} }
if args.id.is_none() && args.number.is_none() {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
format!("Bag arguments")
));
}
Ok(item_id.clone())
} }
}
fn run_command() -> io::Result<()> { fn run_command() -> io::Result<()> {
let cli = Cli::parse(); let cli = Cli::parse();
@ -273,36 +273,24 @@ fn run_command() -> io::Result<()> {
let mut mps = MPS::new(); let mut mps = MPS::new();
mps.list()?; mps.list()?;
} }
Some(Commands::Show(item)) => { Some(Commands::Show(args)) => {
let mut mps = MPS::new(); let mut mps = MPS::new();
if let Some(id) = &item.id { let id = mps.item_id_by_item_id_args(args, true)?;
mps.show(id)?; mps.show(&id)?;
}
if let Some(number) = &item.number {
mps.show_by_number(*number)?;
}
} }
Some(Commands::Add { id }) => { Some(Commands::Add { id }) => {
let mut mps = MPS::new(); let mut mps = MPS::new();
mps.add(id)?; mps.add(id)?;
} }
Some(Commands::Edit(item)) => { Some(Commands::Edit(args)) => {
let mut mps = MPS::new(); let mut mps = MPS::new();
if let Some(id) = &item.id { let id = mps.item_id_by_item_id_args(args, false)?;
mps.edit(id)?; mps.edit(&id)?;
} }
if let Some(number) = &item.number { Some(Commands::Delete(args)) => {
mps.edit_by_number(*number)?;
}
}
Some(Commands::Delete(item)) => {
let mut mps = MPS::new(); let mut mps = MPS::new();
if let Some(id) = &item.id { let id = mps.item_id_by_item_id_args(args, true)?;
mps.delete(id)? mps.delete(&id)?;
}
if let Some(number) = &item.number {
mps.delete_by_number(*number)?;
}
} }
None => { None => {
match Storage::check_installed() { match Storage::check_installed() {

Loading…
Cancel
Save