#![warn(missing_docs)]
use std::io;
use subsoil::core::crypto::KeyTypeId;
use subsoil::keystore::Error as TraitError;
mod local;
pub use local::LocalKeystore;
pub use subsoil::keystore::Keystore;
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error(transparent)]
Io(#[from] io::Error),
#[error(transparent)]
Json(#[from] serde_json::Error),
#[error(
"Requested public key and public key of the loaded private key do not match. \n
This means either that the keystore password is incorrect or that the private key was stored under a wrong public key."
)]
PublicKeyMismatch,
#[error("Invalid recovery phrase (BIP39) data")]
InvalidPhrase,
#[error("Invalid seed")]
InvalidSeed,
#[error("Key crypto type is not supported")]
KeyNotSupported(KeyTypeId),
#[error("Keystore unavailable")]
Unavailable,
}
pub type Result<T> = std::result::Result<T, Error>;
impl From<Error> for TraitError {
fn from(error: Error) -> Self {
match error {
Error::KeyNotSupported(id) => TraitError::KeyNotSupported(id),
Error::InvalidSeed | Error::InvalidPhrase | Error::PublicKeyMismatch => {
TraitError::ValidationError(error.to_string())
},
Error::Unavailable => TraitError::Unavailable,
Error::Io(e) => TraitError::Other(e.to_string()),
Error::Json(e) => TraitError::Other(e.to_string()),
}
}
}