use crate::data::{find_person, PplOps};
use crate::PplError;
use clap::Args;
use sea_orm::DatabaseConnection;
use std::io;
#[derive(Args, Debug)]
pub struct EditArgs {
/// Who to edit (name, nick or id)
pub person: String,
/// New full name
#[arg(long)]
pub name: Option<String>,
/// New nickname, shown in place of the name; "" clears it
#[arg(long)]
pub nick: Option<String>,
}
pub async fn do_edit(args: &EditArgs, db: &DatabaseConnection) -> Result<(), PplError> {
let ppl = PplOps::list(db).await?;
let p = find_person(&ppl, &args.person)?;
if args.name.is_none() && args.nick.is_none() {
// Nothing to change, show what's there
println!(
"{} ({}) nick: {}",
p.name.trim(),
p.id,
p.nick.as_deref().unwrap_or("-")
);
return Ok(());
}
if args.name.as_deref().is_some_and(|n| n.trim().is_empty()) {
return Err(io::Error::new(io::ErrorKind::InvalidInput, "name can't be empty").into());
}
let nick = args.nick.as_ref().map(|n| {
let n = n.trim();
(!n.is_empty()).then(|| n.to_string())
});
PplOps::update(db, p.id, args.name.clone(), nick.clone()).await?;
let name = args.name.as_deref().map(str::trim).unwrap_or(p.name.trim());
match nick {
None => println!("{}: renamed", name),
Some(None) => println!("{}: nick cleared", name),
Some(Some(n)) => println!("{}: nick is now {}", name, n),
}
Ok(())
}
⭐
Log in to mark this repository.
1.5 KiB · text
History
aea77cc