1//! An error type for [`ArtiEphemeralKeystore`](crate::ArtiEphemeralKeystore).
23use std::sync::Arc;
45use tor_error::{ErrorKind, HasKind};
67use crate::KeystoreError;
89/// An error returned by [`ArtiEphemeralKeystore`](crate::ArtiEphemeralKeystore)'s
10/// [`Keystore`](crate::Keystore) implementation.
11#[derive(thiserror::Error, Debug, Clone)]
12pub(crate) enum ArtiEphemeralKeystoreError {
13/// An error that occurred building an ArtiPath from a KeySpecifier
14#[error("unable to build ArtiPath from KeySpecifier")]
15ArtiPathUnavailableError(#[from] crate::key_specifier::ArtiPathUnavailableError),
16/// An error that occurred serializing a key to OpenSSH text format
17#[error("{0}")]
18SshKeySerialize(#[from] ssh_key::Error),
19}
2021impl KeystoreError for ArtiEphemeralKeystoreError {}
2223impl HasKind for ArtiEphemeralKeystoreError {
24fn kind(&self) -> ErrorKind {
25match self {
26// TODO: These could probably use more specific ErrorKinds. They
27 // are explicitly matched instead of using a default match to
28 // encourage future additions to use the appropriate ErrorKind
29 // rather than letting the default match handle it.
30Self::ArtiPathUnavailableError(_) => ErrorKind::Other,
31Self::SshKeySerialize(_) => ErrorKind::Other,
32 }
33 }
34}
3536impl From<ArtiEphemeralKeystoreError> for crate::Error {
37fn from(e: ArtiEphemeralKeystoreError) -> Self {
38crate::Error::Keystore(Arc::new(e))
39 }
40}