pub enum State<Res, Req, U, ReqP, E>where
Res: CacheableResponse,
Req: CacheableRequest,
U: Upstream<Req, Response = Res>,
ReqP: Predicate<Subject = Req>,
E: Extractor<Subject = Req>,{
Initial(Option<Initial<Req, ReqP, E, U>>),
CheckRequestCachePolicy {
cache_policy_future: BoxFuture<'static, RequestCachePolicy<Req>>,
state: Option<CheckRequestCachePolicy<U>>,
},
PollCache {
poll_cache: PollCacheFuture<Res::Cached>,
state: Option<PollCache<Req, U>>,
},
ConvertResponse {
response_future: ConvertResponseFuture<Res>,
state: Option<ConvertResponse>,
},
HandleStale {
response_future: ConvertResponseFuture<Res>,
state: Option<HandleStale<Req, U>>,
},
AwaitResponse {
await_response_future: BoxFuture<'static, Result<Res, ConcurrencyError>>,
state: Option<AwaitResponse<Req, U>>,
},
PollUpstream {
upstream_future: Instrumented<U::Future>,
state: Option<PollUpstream>,
},
CheckResponseCachePolicy {
cache_policy: BoxFuture<'static, ResponseCachePolicy<Res>>,
state: Option<CheckResponseCachePolicy>,
},
UpdateCache {
update_cache_future: BoxFuture<'static, (Result<(), BackendError>, Res, BoxContext)>,
state: Option<UpdateCache>,
},
Response(Option<Response<Res>>),
}Variants§
Initial(Option<Initial<Req, ReqP, E, U>>)
Initial state - all data needed for the first transition
CheckRequestCachePolicy
Checking if request should be cached
Fields
§
cache_policy_future: BoxFuture<'static, RequestCachePolicy<Req>>PollCache
Polling the cache backend - context is captured in the future
ConvertResponse
Converting cached value to response (cache hit, no refill needed)
HandleStale
Handling stale cache hit - convert to response then apply stale policy
AwaitResponse
Awaiting response from another concurrent request
Fields
§
await_response_future: BoxFuture<'static, Result<Res, ConcurrencyError>>PollUpstream
Polling upstream service
CheckResponseCachePolicy
Checking if response should be cached
Fields
§
cache_policy: BoxFuture<'static, ResponseCachePolicy<Res>>UpdateCache
Updating cache with response - context is captured in the future
Fields
§
update_cache_future: BoxFuture<'static, (Result<(), BackendError>, Res, BoxContext)>§
state: Option<UpdateCache>Response(Option<Response<Res>>)
Final state with response
Trait Implementations§
Source§impl<Res, Req, U, ReqP, E> Debug for State<Res, Req, U, ReqP, E>where
Res: CacheableResponse,
Req: CacheableRequest,
U: Upstream<Req, Response = Res>,
ReqP: Predicate<Subject = Req>,
E: Extractor<Subject = Req>,
impl<Res, Req, U, ReqP, E> Debug for State<Res, Req, U, ReqP, E>where
Res: CacheableResponse,
Req: CacheableRequest,
U: Upstream<Req, Response = Res>,
ReqP: Predicate<Subject = Req>,
E: Extractor<Subject = Req>,
impl<'pin, Res, Req, U, ReqP, E> Unpin for State<Res, Req, U, ReqP, E>where
Res: CacheableResponse,
Req: CacheableRequest,
U: Upstream<Req, Response = Res>,
ReqP: Predicate<Subject = Req>,
E: Extractor<Subject = Req>,
PinnedFieldsOf<__State<'pin, Res, Req, U, ReqP, E>>: Unpin,
Auto Trait Implementations§
impl<Res, Req, U, ReqP, E> !Freeze for State<Res, Req, U, ReqP, E>
impl<Res, Req, U, ReqP, E> !RefUnwindSafe for State<Res, Req, U, ReqP, E>
impl<Res, Req, U, ReqP, E> !Sync for State<Res, Req, U, ReqP, E>
impl<Res, Req, U, ReqP, E> !UnwindSafe for State<Res, Req, U, ReqP, E>
impl<Res, Req, U, ReqP, E> Send for State<Res, Req, U, ReqP, E>where
Option<Initial<Req, ReqP, E, U>>: Send,
Pin<Box<dyn Future<Output = CachePolicy<CacheablePolicyData<Req>, Req>> + Send>>: Send,
Option<CheckRequestCachePolicy<U>>: Send,
Pin<Box<dyn Future<Output = (Result<Option<CacheValue<<Res as CacheableResponse>::Cached>>, BackendError>, SmallBox<dyn Context, S4>)> + Send>>: Send,
Option<PollCache<Req, U>>: Send,
ConvertResponseFuture<Res>: Send,
Option<HandleStale<Req, U>>: Send,
Pin<Box<dyn Future<Output = Result<Res, ConcurrencyError>> + Send>>: Send,
Option<AwaitResponse<Req, U>>: Send,
Instrumented<<U as Upstream<Req>>::Future>: Send,
Pin<Box<dyn Future<Output = CachePolicy<CacheValue<<Res as CacheableResponse>::Cached>, Res>> + Send>>: Send,
Pin<Box<dyn Future<Output = (Result<(), BackendError>, Res, SmallBox<dyn Context, S4>)> + Send>>: Send,
Option<Response<Res>>: Send,
impl<Res, Req, U, ReqP, E> UnsafeUnpin for State<Res, Req, U, ReqP, E>where
Option<Initial<Req, ReqP, E, U>>: UnsafeUnpin,
Pin<Box<dyn Future<Output = CachePolicy<CacheablePolicyData<Req>, Req>> + Send>>: UnsafeUnpin,
Option<CheckRequestCachePolicy<U>>: UnsafeUnpin,
Pin<Box<dyn Future<Output = (Result<Option<CacheValue<<Res as CacheableResponse>::Cached>>, BackendError>, SmallBox<dyn Context, S4>)> + Send>>: UnsafeUnpin,
Option<PollCache<Req, U>>: UnsafeUnpin,
ConvertResponseFuture<Res>: UnsafeUnpin,
Option<HandleStale<Req, U>>: UnsafeUnpin,
Pin<Box<dyn Future<Output = Result<Res, ConcurrencyError>> + Send>>: UnsafeUnpin,
Option<AwaitResponse<Req, U>>: UnsafeUnpin,
Instrumented<<U as Upstream<Req>>::Future>: UnsafeUnpin,
Pin<Box<dyn Future<Output = CachePolicy<CacheValue<<Res as CacheableResponse>::Cached>, Res>> + Send>>: UnsafeUnpin,
Pin<Box<dyn Future<Output = (Result<(), BackendError>, Res, SmallBox<dyn Context, S4>)> + Send>>: UnsafeUnpin,
Option<Response<Res>>: UnsafeUnpin,
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> 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.