Implement --list and --list-all commands

Requires a MSRV of 1.44 due to the transitive dependency on bitvec 0.19.
This commit is contained in:
Jack Grigg
2021-01-01 03:23:37 +00:00
parent 3ee6d59dcd
commit babe64da42
7 changed files with 890 additions and 12 deletions
+19
View File
@@ -4,6 +4,7 @@ use std::io;
pub enum Error {
Io(io::Error),
MultipleCommands,
YubiKey(yubikey_piv::Error),
}
impl From<io::Error> for Error {
@@ -12,6 +13,12 @@ impl From<io::Error> for Error {
}
}
impl From<yubikey_piv::error::Error> for Error {
fn from(e: yubikey_piv::error::Error) -> Self {
Error::YubiKey(e)
}
}
// Rust only supports `fn main() -> Result<(), E: Debug>`, so we implement `Debug`
// manually to provide the error output we want.
impl fmt::Debug for Error {
@@ -22,6 +29,18 @@ impl fmt::Debug for Error {
f,
"Only one of --generate, --identity, --list, --list-all can be specified."
)?,
Error::YubiKey(e) => match e {
yubikey_piv::error::Error::NotFound => {
writeln!(f, "Please insert the YubiKey you want to set up")?
}
e => {
writeln!(f, "Error while communicating with YubiKey: {}", e)?;
use std::error::Error;
if let Some(inner) = e.source() {
writeln!(f, "Cause: {}", inner)?;
}
}
},
}
writeln!(f)?;
writeln!(