pub mod filestorage;
pub mod keyringstorage;
use keyring::Error as KeyringError;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum KeyStorageError {
#[error("Key has a bad syntax")]
BadSyntax,
#[error("Provider service error")]
ProviderError,
#[error("No such key")]
NoSuchKey,
#[error("keyring error: {0}")]
KeyringError(KeyringError),
}
impl From<KeyringError> for KeyStorageError {
fn from(e: KeyringError) -> Self {
Self::KeyringError(e)
}
}
pub trait KeyStorage {
fn get_key(&self, storage_id: &str) -> Result<String, KeyStorageError>;
fn set_key(&self, storage_id: &str, key: &str) -> Result<(), KeyStorageError>;
fn is_supported(&self) -> bool;
}
#[cfg(test)]
mod tests {
use pretty_assertions::assert_eq;
use super::*;
#[test]
fn test_system_keys_mod_errors() {
assert_eq!(
KeyStorageError::BadSyntax.to_string(),
String::from("Key has a bad syntax")
);
assert_eq!(
KeyStorageError::ProviderError.to_string(),
String::from("Provider service error")
);
assert_eq!(
KeyStorageError::NoSuchKey.to_string(),
String::from("No such key")
);
}
}