summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-17 02:05:52 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-01-20 20:57:07 +0000
commitdb198936be1a80f1735731d9e95eb6f4c48a5329 (patch)
tree3d157472a3e88aea458b16cb87c58d6f5c42ac11
parent591c55ff294ee12812e4be1b90f03a093f83a4f5 (diff)
downloadnitrokey-rs-db198936be1a80f1735731d9e95eb6f4c48a5329.tar.gz
nitrokey-rs-db198936be1a80f1735731d9e95eb6f4c48a5329.tar.bz2
Add the Error enum and the Result<T> typedef
The Error enum is a wrapper for the possible error types (currently only CommandError). Result<T> is defined as Result<T, Error>.
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/error.rs35
-rw-r--r--src/lib.rs2
3 files changed, 38 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d2982a9..c69fd25 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,7 +2,9 @@
- Remove the `test-pro` and `test-storage` features.
- Implement `Display` for `Version`.
- Introduce `DEFAULT_ADMIN_PIN` and `DEFAULT_USER_PIN` constants.
-- Implement `std::error::Error` for `CommandError`.
+- Refactor the error handling code:
+ - Implement `std::error::Error` for `CommandError`.
+ - Add the `Error` enum and the `Result` typedef.
# v0.3.4 (2019-01-20)
- Fix authentication methods that assumed that `char` is signed.
diff --git a/src/error.rs b/src/error.rs
index dcaa4d2..89c4c82 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -2,8 +2,41 @@ use std::borrow;
use std::error;
use std::fmt;
use std::os::raw;
+use std::result;
-/// Error types returned by Nitrokey device or by the library.
+/// An error returned by the nitrokey crate.
+#[derive(Debug)]
+pub enum Error {
+ /// An error reported by the Nitrokey device in the response packet.
+ CommandError(CommandError),
+}
+
+impl From<CommandError> for Error {
+ fn from(err: CommandError) -> Self {
+ Error::CommandError(err)
+ }
+}
+
+impl error::Error for Error {
+ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+ match *self {
+ Error::CommandError(ref err) => Some(err),
+ }
+ }
+}
+
+impl fmt::Display for Error {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match *self {
+ Error::CommandError(ref err) => write!(f, "Command error: {}", err),
+ }
+ }
+}
+
+/// A result returned by the nitrokey crate.
+pub type Result<T> = result::Result<T, Error>;
+
+/// An error reported by the Nitrokey device in the response packet.
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum CommandError {
/// A packet with a wrong checksum has been sent or received.
diff --git a/src/lib.rs b/src/lib.rs
index cec5db7..df11cc3 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -104,7 +104,7 @@ pub use crate::device::{
connect, connect_model, Device, DeviceWrapper, Model, Pro, SdCardData, Storage,
StorageProductionInfo, StorageStatus, VolumeMode, VolumeStatus,
};
-pub use crate::error::CommandError;
+pub use crate::error::{CommandError, Error, Result};
pub use crate::otp::{ConfigureOtp, GenerateOtp, OtpMode, OtpSlotData};
pub use crate::pws::{GetPasswordSafe, PasswordSafe, SLOT_COUNT};
pub use crate::util::LogLevel;