pub struct SequentialReadPolicy;Expand description
Sequential read policy: Try L1 first, then L2 on miss.
This is the default and most common strategy. It provides:
- Fast reads from L1 when available
- Fallback to L2 if L1 misses or fails
- Graceful degradation if L1 fails
§Behavior
- Call
read_l1(key)- Hit: Return immediately with L1 context
- Miss or Error: Continue to L2
- Call
read_l2(key)- Hit: Return value with L2 context (L2 closure handles any L1 population)
- Miss: Return None
- Error: Return error
§Note
The closures passed to execute_with are responsible for any post-processing
like L1 population or envelope wrapping. This keeps the policy focused purely
on the control flow strategy.
Implementations§
Trait Implementations§
Source§impl Clone for SequentialReadPolicy
impl Clone for SequentialReadPolicy
Source§fn clone(&self) -> SequentialReadPolicy
fn clone(&self) -> SequentialReadPolicy
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl CompositionReadPolicy for SequentialReadPolicy
impl CompositionReadPolicy for SequentialReadPolicy
Source§fn execute_with<'life0, 'life1, 'async_trait, T, E, F1, F2, Fut1, Fut2, O>(
&'life0 self,
key: CacheKey,
read_l1: F1,
read_l2: F2,
_offload: &'life1 O,
) -> Pin<Box<dyn Future<Output = Result<ReadResult<T>, E>> + Send + 'async_trait>>where
T: Send + 'static + 'async_trait,
E: Send + Debug + 'static + 'async_trait,
F1: FnOnce(CacheKey) -> Fut1 + Send + 'async_trait,
F2: FnOnce(CacheKey) -> Fut2 + Send + 'async_trait,
Fut1: Future<Output = (Result<Option<CacheValue<T>>, E>, BoxContext)> + Send + 'static + 'async_trait,
Fut2: Future<Output = (Result<Option<CacheValue<T>>, E>, BoxContext)> + Send + 'static + 'async_trait,
O: Offload<'static> + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn execute_with<'life0, 'life1, 'async_trait, T, E, F1, F2, Fut1, Fut2, O>(
&'life0 self,
key: CacheKey,
read_l1: F1,
read_l2: F2,
_offload: &'life1 O,
) -> Pin<Box<dyn Future<Output = Result<ReadResult<T>, E>> + Send + 'async_trait>>where
T: Send + 'static + 'async_trait,
E: Send + Debug + 'static + 'async_trait,
F1: FnOnce(CacheKey) -> Fut1 + Send + 'async_trait,
F2: FnOnce(CacheKey) -> Fut2 + Send + 'async_trait,
Fut1: Future<Output = (Result<Option<CacheValue<T>>, E>, BoxContext)> + Send + 'static + 'async_trait,
Fut2: Future<Output = (Result<Option<CacheValue<T>>, E>, BoxContext)> + Send + 'static + 'async_trait,
O: Offload<'static> + 'async_trait,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Execute a read operation with custom read closures for each layer. Read more
Source§impl Debug for SequentialReadPolicy
impl Debug for SequentialReadPolicy
Source§impl Default for SequentialReadPolicy
impl Default for SequentialReadPolicy
Source§fn default() -> SequentialReadPolicy
fn default() -> SequentialReadPolicy
Returns the “default value” for a type. Read more
impl Copy for SequentialReadPolicy
Auto Trait Implementations§
impl Freeze for SequentialReadPolicy
impl RefUnwindSafe for SequentialReadPolicy
impl Send for SequentialReadPolicy
impl Sync for SequentialReadPolicy
impl Unpin for SequentialReadPolicy
impl UnwindSafe for SequentialReadPolicy
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
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
Mutably borrows from an owned value. Read more
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> 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>
Returns the layout of the type.
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
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.