aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2020-09-06 12:57:16 +0200
committerRobin Krahl <robin.krahl@ireas.org>2020-09-06 12:57:16 +0200
commit6039e0c76997014ed3f78768f8558da98d373e4b (patch)
tree165b2e3a55058a4a169095d44b9f578b1396dc8c
parent3046af524b9634e5dd0b8f5a4a98ac8b36dcfb36 (diff)
downloadnitrokey-rs-6039e0c76997014ed3f78768f8558da98d373e4b.tar.gz
nitrokey-rs-6039e0c76997014ed3f78768f8558da98d373e4b.tar.bz2
Make *Error, Model, DeviceWrapper non-exhaustive
Previously, all enums defined by the nitrokey crate were exhaustive. This means that adding new variants to these enums is a breaking change. To make it possible to add new features to nitrokey-rs without breaking compatibility, this patch marks the Error, CommandError, CommunicationError, LibraryError, Model and DeviceWrapper enums as non-exhaustive.
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/device/mod.rs1
-rw-r--r--src/device/wrapper.rs1
-rw-r--r--src/error.rs4
4 files changed, 8 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd43612..80efb57 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,8 @@ SPDX-License-Identifier: CC0-1.0
# Unreleased
- Export the `FirmwareVersion` struct.
+- Mark the `Error`, `CommandError`, `CommunicationError`, `LibraryError`,
+ `Model` and `DeviceWrapper` enums as non-exhaustive.
# v0.7.1 (2020-08-30)
- Remove the custom `std::error::Error::source` implementation for
diff --git a/src/device/mod.rs b/src/device/mod.rs
index c84faa1..e9018a4 100644
--- a/src/device/mod.rs
+++ b/src/device/mod.rs
@@ -28,6 +28,7 @@ pub use wrapper::DeviceWrapper;
/// Available Nitrokey models.
#[derive(Clone, Copy, Debug, PartialEq)]
+#[non_exhaustive]
pub enum Model {
/// The Nitrokey Storage.
Storage,
diff --git a/src/device/wrapper.rs b/src/device/wrapper.rs
index 69291ad..942a905 100644
--- a/src/device/wrapper.rs
+++ b/src/device/wrapper.rs
@@ -64,6 +64,7 @@ use crate::otp::GenerateOtp;
///
/// [`connect`]: struct.Manager.html#method.connect
#[derive(Debug)]
+#[non_exhaustive]
pub enum DeviceWrapper<'a> {
/// A Nitrokey Storage device.
Storage(Storage<'a>),
diff --git a/src/error.rs b/src/error.rs
index 64a2ce0..f1e91c3 100644
--- a/src/error.rs
+++ b/src/error.rs
@@ -11,6 +11,7 @@ use crate::device;
/// An error returned by the nitrokey crate.
#[derive(Debug)]
+#[non_exhaustive]
pub enum Error {
/// An error reported by the Nitrokey device in the response packet.
CommandError(CommandError),
@@ -111,6 +112,7 @@ impl fmt::Display for Error {
/// An error reported by the Nitrokey device in the response packet.
#[derive(Clone, Copy, Debug, PartialEq)]
+#[non_exhaustive]
pub enum CommandError {
/// A packet with a wrong checksum has been sent or received.
WrongCrc,
@@ -177,6 +179,7 @@ impl fmt::Display for CommandError {
/// A device communication error.
#[derive(Clone, Copy, Debug, PartialEq)]
+#[non_exhaustive]
pub enum CommunicationError {
/// Could not connect to a Nitrokey device.
NotConnected,
@@ -215,6 +218,7 @@ impl fmt::Display for CommunicationError {
/// A library usage error.
#[derive(Clone, Copy, Debug, PartialEq)]
+#[non_exhaustive]
pub enum LibraryError {
/// A supplied string exceeded a length limit.
StringTooLong,