use thiserror::Error;
use crate::protocol::{EnclaveErrorCode, EnclaveWireError};
#[derive(Debug, Error)]
pub enum EnclaveError {
#[error("invalid request: {0}")]
InvalidRequest(String),
#[error("missing input: {0}")]
MissingInput(String),
#[error("decrypt failed: {0}")]
DecryptFailed(String),
#[error("threshold failed: {0}")]
ThresholdFailed(String),
#[error("policy eval failed: {0}")]
PolicyEvalFailed(String),
#[error("key derivation failed: {0}")]
KeyDerivation(String),
}
impl EnclaveError {
pub fn to_wire(&self) -> EnclaveWireError {
let code = match self {
Self::InvalidRequest(_) => EnclaveErrorCode::InvalidRequest,
Self::MissingInput(_) => EnclaveErrorCode::MissingInput,
Self::DecryptFailed(_) => EnclaveErrorCode::DecryptFailed,
Self::ThresholdFailed(_) => EnclaveErrorCode::ThresholdFailed,
Self::PolicyEvalFailed(_) => EnclaveErrorCode::PolicyEvalFailed,
Self::KeyDerivation(_) => EnclaveErrorCode::KeyDerivation,
};
EnclaveWireError {
code,
message: self.to_string(),
retryable: false,
}
}
}