diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/device.rs | 25 | ||||
| -rw-r--r-- | src/lib.rs | 62 | 
2 files changed, 72 insertions, 15 deletions
| diff --git a/src/device.rs b/src/device.rs index f28558d..758691d 100644 --- a/src/device.rs +++ b/src/device.rs @@ -9,7 +9,7 @@ use nitrokey_sys;  use crate::auth::Authenticate;  use crate::config::{Config, RawConfig}; -use crate::error::{CommunicationError, Error}; +use crate::error::Error;  use crate::otp::GenerateOtp;  use crate::pws::GetPasswordSafe;  use crate::util::{ @@ -755,16 +755,12 @@ impl Pro {      /// ```      ///      /// [`NotConnected`]: enum.CommunicationError.html#variant.NotConnected +    #[deprecated(since = "0.4.0", note = "use `nitrokey::Manager::connect_pro` instead")]      pub fn connect() -> Result<Pro, Error> { -        // TODO: maybe Option instead of Result? -        if connect_enum(Model::Pro) { -            Ok(Pro::new()) -        } else { -            Err(CommunicationError::NotConnected.into()) -        } +        crate::take()?.connect_pro().map_err(Into::into)      } -    fn new() -> Pro { +    pub(crate) fn new() -> Pro {          Pro {              marker: marker::PhantomData,          } @@ -808,16 +804,15 @@ impl Storage {      /// ```      ///      /// [`NotConnected`]: enum.CommunicationError.html#variant.NotConnected +    #[deprecated( +        since = "0.4.0", +        note = "use `nitrokey::Manager::connect_storage` instead" +    )]      pub fn connect() -> Result<Storage, Error> { -        // TODO: maybe Option instead of Result? -        if connect_enum(Model::Storage) { -            Ok(Storage::new()) -        } else { -            Err(CommunicationError::NotConnected.into()) -        } +        crate::take()?.connect_storage().map_err(Into::into)      } -    fn new() -> Storage { +    pub(crate) fn new() -> Storage {          Storage {              marker: marker::PhantomData,          } @@ -246,6 +246,68 @@ impl Manager {              Err(CommunicationError::NotConnected.into())          }      } + +    /// Connects to a Nitrokey Pro. +    /// +    /// # Errors +    /// +    /// - [`NotConnected`][] if no Nitrokey device of the given model is connected +    /// +    /// # Example +    /// +    /// ``` +    /// use nitrokey::Pro; +    /// +    /// fn use_pro(device: Pro) {} +    /// +    /// # fn main() -> Result<(), nitrokey::Error> { +    /// match nitrokey::take()?.connect_pro() { +    ///     Ok(device) => use_pro(device), +    ///     Err(err) => println!("Could not connect to the Nitrokey Pro: {}", err), +    /// } +    /// #     Ok(()) +    /// # } +    /// ``` +    /// +    /// [`NotConnected`]: enum.CommunicationError.html#variant.NotConnected +    pub fn connect_pro(&mut self) -> Result<Pro, Error> { +        if device::connect_enum(device::Model::Pro) { +            Ok(device::Pro::new()) +        } else { +            Err(CommunicationError::NotConnected.into()) +        } +    } + +    /// Connects to a Nitrokey Storage. +    /// +    /// # Errors +    /// +    /// - [`NotConnected`][] if no Nitrokey device of the given model is connected +    /// +    /// # Example +    /// +    /// ``` +    /// use nitrokey::Storage; +    /// +    /// fn use_storage(device: Storage) {} +    /// +    /// # fn main() -> Result<(), nitrokey::Error> { +    /// match nitrokey::take()?.connect_storage() { +    ///     Ok(device) => use_storage(device), +    ///     Err(err) => println!("Could not connect to the Nitrokey Storage: {}", err), +    /// } +    /// #     Ok(()) +    /// # } +    /// ``` +    /// +    /// [`NotConnected`]: enum.CommunicationError.html#variant.NotConnected +    pub fn connect_storage(&mut self) -> Result<Storage, Error> { +        if device::connect_enum(Model::Storage) { +            Ok(Storage::new()) +        } else { +            Err(CommunicationError::NotConnected.into()) +        } +    }  }  /// Take an instance of the connection manager, blocking until an instance is available. | 
