pnafs 0.0.6

PNA(Portable-Network-Archive) file system
pub(crate) mod complete;
pub(crate) mod mount;

use crate::cli::{Cli, PasswordArgs, SubCommand};
use std::io;

pub(crate) fn entry(args: Cli) -> io::Result<()> {
    match args.subcommand {
        SubCommand::Mount(args) => args.execute(),
        SubCommand::Complete(args) => args.execute(),
    }
}

pub(crate) trait Command {
    fn execute(self) -> io::Result<()>;
}

fn ask_password(args: PasswordArgs) -> io::Result<Option<String>> {
    Ok(match args.password {
        Some(password @ Some(_)) => {
            eprintln!("warning: Using a password on the command line interface can be insecure.");
            password
        }
        Some(None) => Some(rpassword::prompt_password("Enter password: ")?),
        None => None,
    })
}