mod autotype;
mod error;
mod password;
mod prelude;
mod shell;
pub(crate) use crate::autotype::Autotype;
use clap::Parser;
use std::process::ExitCode;
use prelude::*;
#[derive(Parser)]
#[command(version, about, long_about = None)]
struct App {}
impl App {
fn new() -> Self {
Self::parse()
}
fn run(&self) -> Result<()> {
let fuzzel = Fuzzel::default();
let password_store = Pass::default();
let wtype = Wtype::default();
let password_list = password_store.list()?;
let selection = fuzzel.pick(password_list)?;
let field_list = password_store.show(selection)?;
let password_data: Password = field_list.parse()?;
let key = fuzzel.pick(password_data.menu())?;
let value = password_data.get(&key).unwrap_or_default();
let yt_params = match (key.as_str(), value.clone()) {
("autotype", at_value) => {
let at = Autotype::from((at_value.clone(), password_data));
at.into()
}
(_, value) => vec![value],
};
wtype.send_keys(yt_params)?;
Ok(())
}
}
fn main() -> ExitCode {
if let Err(err) = App::new().run() {
return process_error(err);
}
ExitCode::SUCCESS
}
fn process_error(err: Error) -> ExitCode {
eprintln!("An error occurred: {}", err);
ExitCode::FAILURE
}