From 48a26b69a366cc2ba17b3aaad7f9d890604b0a3b Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Wed, 3 May 2023 05:38:59 +0200 Subject: [PATCH] don't use associated error for Decrypt*Backend traits --- crates/rustic_core/src/backend/decrypt.rs | 69 +++++++---------------- crates/rustic_core/src/backend/dry_run.rs | 18 ++---- 2 files changed, 24 insertions(+), 63 deletions(-) diff --git a/crates/rustic_core/src/backend/decrypt.rs b/crates/rustic_core/src/backend/decrypt.rs index 1d8fadeda..3d1cee893 100644 --- a/crates/rustic_core/src/backend/decrypt.rs +++ b/crates/rustic_core/src/backend/decrypt.rs @@ -21,15 +21,9 @@ pub trait DecryptFullBackend: DecryptWriteBackend + DecryptReadBackend {} impl DecryptFullBackend for T {} pub trait DecryptReadBackend: ReadBackend { - type DecryptReadBackendError: Send + Sync + 'static + std::error::Error; + fn decrypt(&self, data: &[u8]) -> RusticResult>; - fn decrypt(&self, data: &[u8]) -> Result, Self::DecryptReadBackendError>; - - fn read_encrypted_full( - &self, - tpe: FileType, - id: &Id, - ) -> Result; + fn read_encrypted_full(&self, tpe: FileType, id: &Id) -> RusticResult; fn read_encrypted_partial( &self, @@ -39,7 +33,7 @@ pub trait DecryptReadBackend: ReadBackend { offset: u32, length: u32, uncompressed_length: Option, - ) -> Result { + ) -> RusticResult { let mut data = self.decrypt( &self .read_partial(tpe, id, cacheable, offset, length) @@ -61,7 +55,7 @@ pub trait DecryptReadBackend: ReadBackend { Ok(data.into()) } - fn get_file(&self, id: &Id) -> Result { + fn get_file(&self, id: &Id) -> RusticResult { let data = self.read_encrypted_full(F::TYPE, id)?; Ok(serde_json::from_slice(&data)?) } @@ -69,10 +63,7 @@ pub trait DecryptReadBackend: ReadBackend { fn stream_all( &self, p: ProgressBar, - ) -> Result< - Receiver>, - Self::DecryptReadBackendError, - > { + ) -> RusticResult>> { let list = self .list(F::TYPE) .map_err(|_| BackendCryptErrorKind::ListingIdsInDecryptionBackendFailed)?; @@ -83,10 +74,7 @@ pub trait DecryptReadBackend: ReadBackend { &self, list: Vec, p: ProgressBar, - ) -> Result< - Receiver>, - Self::DecryptReadBackendError, - > { + ) -> RusticResult>> { p.set_length(list.len() as u64); let (tx, rx) = unbounded(); @@ -102,16 +90,11 @@ pub trait DecryptReadBackend: ReadBackend { pub trait DecryptWriteBackend: WriteBackend { type Key: CryptoKey; - type DecryptWriteBackendError: Send + Sync + 'static + std::error::Error; fn key(&self) -> &Self::Key; - fn hash_write_full( - &self, - tpe: FileType, - data: &[u8], - ) -> Result; + fn hash_write_full(&self, tpe: FileType, data: &[u8]) -> RusticResult; - fn save_file(&self, file: &F) -> Result { + fn save_file(&self, file: &F) -> RusticResult { let data = serde_json::to_vec(file)?; self.hash_write_full(F::TYPE, &data) } @@ -120,14 +103,13 @@ pub trait DecryptWriteBackend: WriteBackend { &self, list: I, p: ProgressBar, - ) -> Result<(), Self::DecryptWriteBackendError> { + ) -> RusticResult<()> { p.set_length(list.len() as u64); - list.par_bridge() - .try_for_each(|file| -> Result<_, Self::DecryptWriteBackendError> { - self.save_file(file)?; - p.inc(1); - Ok(()) - })?; + list.par_bridge().try_for_each(|file| -> RusticResult<_> { + self.save_file(file)?; + p.inc(1); + Ok(()) + })?; p.finish(); Ok(()) } @@ -138,7 +120,7 @@ pub trait DecryptWriteBackend: WriteBackend { cacheable: bool, list: I, p: ProgressBar, - ) -> Result<(), Self::DecryptWriteBackendError> { + ) -> RusticResult<()> { p.set_length(list.len() as u64); list.par_bridge().try_for_each(|id| -> RusticResult<_> { self.remove(tpe, id, cacheable).unwrap(); @@ -172,17 +154,12 @@ impl DecryptBackend { impl DecryptWriteBackend for DecryptBackend { type Key = C; - type DecryptWriteBackendError = RusticError; fn key(&self) -> &Self::Key { &self.key } - fn hash_write_full( - &self, - tpe: FileType, - data: &[u8], - ) -> Result { + fn hash_write_full(&self, tpe: FileType, data: &[u8]) -> RusticResult { let data = match self.zstd { Some(level) => { let mut out = vec![2_u8]; @@ -203,20 +180,14 @@ impl DecryptWriteBackend for DecryptBackend } impl DecryptReadBackend for DecryptBackend { - type DecryptReadBackendError = RusticError; - - fn decrypt(&self, data: &[u8]) -> Result, Self::DecryptReadBackendError> { + fn decrypt(&self, data: &[u8]) -> RusticResult> { Ok(self .key .decrypt_data(data) .map_err(|_| BackendCryptErrorKind::DecryptingFromBackendFailed)?) } - fn read_encrypted_full( - &self, - tpe: FileType, - id: &Id, - ) -> Result { + fn read_encrypted_full(&self, tpe: FileType, id: &Id) -> RusticResult { let decrypted = self.decrypt( &self .read_full(tpe, id) @@ -233,7 +204,7 @@ impl DecryptReadBackend for DecryptBackend { } impl ReadBackend for DecryptBackend { - type ReadBackendError = RusticError; + type ReadBackendError = R::ReadBackendError; fn location(&self) -> String { self.backend.location() @@ -269,7 +240,7 @@ impl ReadBackend for DecryptBackend { } impl WriteBackend for DecryptBackend { - type WriteBackendError = RusticError; + type WriteBackendError = R::WriteBackendError; fn create(&self) -> Result<(), Self::WriteBackendError> { self.backend.create() diff --git a/crates/rustic_core/src/backend/dry_run.rs b/crates/rustic_core/src/backend/dry_run.rs index 22bdbe735..138c03584 100644 --- a/crates/rustic_core/src/backend/dry_run.rs +++ b/crates/rustic_core/src/backend/dry_run.rs @@ -1,6 +1,7 @@ use bytes::Bytes; use zstd::decode_all; +use crate::RusticResult; use crate::{error::BackendErrorKind, BackendCryptErrorKind, RusticError, RusticErrorKind}; use crate::backend::{ @@ -21,9 +22,7 @@ impl DryRunBackend { } impl DecryptReadBackend for DryRunBackend { - type DecryptReadBackendError = RusticError; - - fn decrypt(&self, data: &[u8]) -> Result, Self::DecryptReadBackendError> { + fn decrypt(&self, data: &[u8]) -> RusticResult> { self.be.decrypt(data).map_err(|_| { { RusticErrorKind::BackendCryptError( @@ -34,11 +33,7 @@ impl DecryptReadBackend for DryRunBackend { }) } - fn read_encrypted_full( - &self, - tpe: FileType, - id: &Id, - ) -> Result { + fn read_encrypted_full(&self, tpe: FileType, id: &Id) -> RusticResult { let decrypted = self.decrypt(&self.read_full(tpe, id).map_err(|_| { RusticErrorKind::BackendCryptError(BackendCryptErrorKind::DecryptionInFullReadFailed) })?)?; @@ -108,17 +103,12 @@ impl ReadBackend for DryRunBackend { impl DecryptWriteBackend for DryRunBackend { type Key = ::Key; - type DecryptWriteBackendError = RusticError; fn key(&self) -> &Self::Key { self.be.key() } - fn hash_write_full( - &self, - tpe: FileType, - data: &[u8], - ) -> Result { + fn hash_write_full(&self, tpe: FileType, data: &[u8]) -> RusticResult { if self.dry_run { Ok(Id::default()) } else {