use hex::FromHexError;
use miette::Diagnostic;
use recipher::errors::RecipherError;
use static_assertions::assert_impl_all;
use thiserror::Error;
use zerokms_protocol::ViturRequestError;
#[derive(Diagnostic, Error, Debug)]
pub enum CreateDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum GrantDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum RevokeDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum ListDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum EnableDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum DisableDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum ModifyDatasetError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum CreateClientError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum ListClientError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum RevokeClientError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum RetrieveKeyError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
#[error("Received an invalid number of keys from request. Expected {expected} but received {received}")]
InvalidNumberOfKeys { expected: usize, received: usize },
}
#[derive(Diagnostic, Error, Debug)]
pub enum GenerateKeyError {
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
#[error("Failed to generate IV: {0}")]
GenerateIv(RecipherError),
#[error("Received an invalid number of keys from request. Expected {expected} but received {received}")]
InvalidNumberOfKeys { expected: usize, received: usize },
}
#[derive(Diagnostic, Error, Debug)]
pub enum EncryptError {
#[error("Failed to generate key: {0}")]
GenerateKey(#[from] GenerateKeyError),
#[error("Failed to encrypt: {0}")]
FailedToEncrypt(aes_gcm_siv::Error),
}
#[derive(Diagnostic, Error, Debug)]
pub enum DecryptError {
#[error("Failed to retrieve key: {0}")]
RetrieveKey(#[from] RetrieveKeyError),
#[error("Failed to decrypt: {0}")]
FailedToDecrypt(aes_gcm_siv::Error),
#[error("Invalid ciphertext: {0}")]
InvalidCiphertext(String),
#[error("Internal error: {0}")]
Internal(String),
#[error("Format error: {0}")]
FormatError(#[from] serde_cbor::Error),
#[error("Failed to decode hex: {0}")]
DecodingError(#[from] FromHexError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum SaveConfigError {
#[error("Failed to generate new root key: {0}")]
CreateRootKey(RecipherError),
#[error("Failed to encrypt root key: {0}")]
EncryptRootKey(EncryptError),
#[error("Failed to decrypt root key: {0}")]
DecryptRootKey(DecryptError),
#[error("Failed to serialize encrypted root key: {0}")]
SerializeEncryptedRootKey(DecryptError),
#[error("Failed to deserialize encrypted root key: {0}")]
DeserializeEncryptedRootKey(DecryptError),
#[error("Invalid index root key length: {0}")]
InvalidIndexRootKeySize(usize),
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
#[derive(Diagnostic, Error, Debug)]
pub enum LoadConfigError {
#[error("Failed to decrypt root key: {0}")]
DecryptRootKey(#[from] DecryptError),
#[error("Failed to deserialize encrypted root key: {0}")]
DeserializeEncryptedRootKey(DecryptError),
#[error("Invalid index root key length: {0}")]
InvalidIndexRootKeySize(usize),
#[error("Failed to send request: {0}")]
RequestFailed(#[from] ViturRequestError),
}
assert_impl_all!(CreateDatasetError: Send, Sync);
assert_impl_all!(GrantDatasetError: Send, Sync);
assert_impl_all!(RevokeDatasetError: Send, Sync);
assert_impl_all!(ListDatasetError: Send, Sync);
assert_impl_all!(CreateClientError: Send, Sync);
assert_impl_all!(ListClientError: Send, Sync);
assert_impl_all!(RevokeClientError: Send, Sync);
assert_impl_all!(RetrieveKeyError: Send, Sync);
assert_impl_all!(GenerateKeyError: Send, Sync);
assert_impl_all!(EncryptError: Send, Sync);
assert_impl_all!(DecryptError: Send, Sync);
assert_impl_all!(SaveConfigError: Send, Sync);
assert_impl_all!(LoadConfigError: Send, Sync);