pub struct MockStorage { /* private fields */ }Expand description
Storage wrapper that delegates to MemoryStorage but can return
configurable errors for specific keys.
Error injection is useful for testing SDK retry logic, cache behaviour, and error propagation without a running server.
Note: The error map uses Key directly (no collection prefix) because
the StorageEngine trait does not have a collection concept — collections
are resolved in the gRPC service layer above storage.
Implementations§
Source§impl MockStorage
impl MockStorage
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new MockStorage wrapping a fresh MemoryStorage.
Sourcepub async fn insert(
&self,
key: impl Into<Key>,
value: CipherBlob,
) -> CoreResult<()>
pub async fn insert( &self, key: impl Into<Key>, value: CipherBlob, ) -> CoreResult<()>
Pre-populate a key with a value.
Prefer MockServerBuilder::with_value for pre-start setup; this
method works at any time once you have a handle to the storage.
§Errors
Propagates errors from the underlying MemoryStorage::put.
Sourcepub fn inject_error(&self, key: impl Into<Key>, err: AmateRSError)
pub fn inject_error(&self, key: impl Into<Key>, err: AmateRSError)
Configure an error to be returned for the given key.
All subsequent get, put, and delete calls for key will return
this error instead of delegating to the inner storage.
Sourcepub fn clear_error(&self, key: impl Into<Key>)
pub fn clear_error(&self, key: impl Into<Key>)
Remove an injected error for key, restoring normal behaviour.
Sourcepub async fn get_all(&self) -> CoreResult<Vec<(Key, CipherBlob)>>
pub async fn get_all(&self) -> CoreResult<Vec<(Key, CipherBlob)>>
Snapshot all key→value pairs currently in the backing store.
Trait Implementations§
Source§impl Clone for MockStorage
impl Clone for MockStorage
Source§fn clone(&self) -> MockStorage
fn clone(&self) -> MockStorage
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for MockStorage
impl Debug for MockStorage
Source§impl Default for MockStorage
impl Default for MockStorage
Source§impl StorageEngine for MockStorage
impl StorageEngine for MockStorage
Source§fn put<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 Key,
value: &'life2 CipherBlob,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn put<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
key: &'life1 Key,
value: &'life2 CipherBlob,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<Option<CipherBlob>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn get<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<Option<CipherBlob>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn atomic_update<'life0, 'life1, 'async_trait, F>(
&'life0 self,
key: &'life1 Key,
f: F,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
F: Fn(&CipherBlob) -> CoreResult<CipherBlob> + Send + Sync + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn atomic_update<'life0, 'life1, 'async_trait, F>(
&'life0 self,
key: &'life1 Key,
f: F,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
F: Fn(&CipherBlob) -> CoreResult<CipherBlob> + Send + Sync + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn delete<'life0, 'life1, 'async_trait>(
&'life0 self,
key: &'life1 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Source§fn range<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
start: &'life1 Key,
end: &'life2 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<Vec<(Key, CipherBlob)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn range<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
start: &'life1 Key,
end: &'life2 Key,
) -> Pin<Box<dyn Future<Output = CoreResult<Vec<(Key, CipherBlob)>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Source§fn keys<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = CoreResult<Vec<Key>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn keys<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = CoreResult<Vec<Key>>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn flush<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn flush<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = CoreResult<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Auto Trait Implementations§
impl Freeze for MockStorage
impl !RefUnwindSafe for MockStorage
impl Send for MockStorage
impl Sync for MockStorage
impl Unpin for MockStorage
impl UnsafeUnpin for MockStorage
impl !UnwindSafe for MockStorage
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::RequestSource§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
out indicating that a T is niched.