summaryrefslogtreecommitdiff
path: root/src/device.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/device.rs')
-rw-r--r--src/device.rs29
1 files changed, 23 insertions, 6 deletions
diff --git a/src/device.rs b/src/device.rs
index 16064c3..40d6ba4 100644
--- a/src/device.rs
+++ b/src/device.rs
@@ -1,4 +1,5 @@
use std::fmt;
+use std::marker;
use libc;
use nitrokey_sys;
@@ -154,7 +155,11 @@ pub enum DeviceWrapper {
/// [`connect`]: fn.connect.html
/// [`Pro::connect`]: #method.connect
#[derive(Debug)]
-pub struct Pro {}
+pub struct Pro {
+ // make sure that users cannot directly instantiate this type
+ #[doc(hidden)]
+ marker: marker::PhantomData<()>,
+}
/// A Nitrokey Storage device without user or admin authentication.
///
@@ -196,7 +201,11 @@ pub struct Pro {}
/// [`connect`]: fn.connect.html
/// [`Storage::connect`]: #method.connect
#[derive(Debug)]
-pub struct Storage {}
+pub struct Storage {
+ // make sure that users cannot directly instantiate this type
+ #[doc(hidden)]
+ marker: marker::PhantomData<()>,
+}
/// The status of a volume on a Nitrokey Storage device.
#[derive(Debug)]
@@ -713,8 +722,12 @@ fn get_connected_model() -> Option<Model> {
fn create_device_wrapper(model: Model) -> DeviceWrapper {
match model {
- Model::Pro => DeviceWrapper::Pro(Pro {}),
- Model::Storage => DeviceWrapper::Storage(Storage {}),
+ Model::Pro => DeviceWrapper::Pro(Pro {
+ marker: marker::PhantomData,
+ }),
+ Model::Storage => DeviceWrapper::Storage(Storage {
+ marker: marker::PhantomData,
+ }),
}
}
@@ -790,7 +803,9 @@ impl Pro {
pub fn connect() -> Result<Pro, Error> {
// TODO: maybe Option instead of Result?
match connect_enum(Model::Pro) {
- true => Ok(Pro {}),
+ true => Ok(Pro {
+ marker: marker::PhantomData,
+ }),
false => Err(CommunicationError::NotConnected.into()),
}
}
@@ -836,7 +851,9 @@ impl Storage {
pub fn connect() -> Result<Storage, Error> {
// TODO: maybe Option instead of Result?
match connect_enum(Model::Storage) {
- true => Ok(Storage {}),
+ true => Ok(Storage {
+ marker: marker::PhantomData,
+ }),
false => Err(CommunicationError::NotConnected.into()),
}
}