pub struct CheckpointVerifier<S>where
    S: Service<Request, Response = Response, Error = BoxError> + Send + Clone + 'static,
    S::Future: Send + 'static,{
    checkpoint_list: Arc<CheckpointList>,
    network: Network,
    initial_tip_hash: Option<Hash>,
    state_service: S,
    queued: BTreeMap<Height, Vec<QueuedBlock>>,
    verifier_progress: Progress<Height>,
    reset_receiver: Receiver<Option<(Height, Hash)>>,
    reset_sender: Sender<Option<(Height, Hash)>>,
    queued_blocks_bar: Tx,
    verified_checkpoint_bar: Tx,
}Expand description
A checkpointing block verifier.
Verifies blocks using a supplied list of checkpoints. There must be at least one checkpoint for the genesis block.
Fields§
§checkpoint_list: Arc<CheckpointList>The checkpoint list for this verifier.
network: NetworkThe network rules used by this verifier.
initial_tip_hash: Option<Hash>The hash of the initial tip, if any.
state_service: SThe underlying state service, possibly wrapped in other services.
queued: BTreeMap<Height, Vec<QueuedBlock>>A queue of unverified blocks.
Contains a list of unverified blocks at each block height. In most cases, the checkpoint verifier will store zero or one block at each height.
Blocks are verified in order, once there is a chain from the previous checkpoint to a target checkpoint.
The first checkpoint does not have any ancestors, so it only verifies the genesis block.
verifier_progress: Progress<Height>The current progress of this verifier.
reset_receiver: Receiver<Option<(Height, Hash)>>A channel to receive requests to reset the verifier, receiving the tip of the state.
reset_sender: Sender<Option<(Height, Hash)>>A channel to send requests to reset the verifier, passing the tip of the state.
queued_blocks_bar: TxQueued block height progress transmitter.
verified_checkpoint_bar: TxVerified checkpoint progress transmitter.
Implementations§
Source§impl<S> CheckpointVerifier<S>
 
impl<S> CheckpointVerifier<S>
Sourcepub fn new(
    network: &Network,
    initial_tip: Option<(Height, Hash)>,
    state_service: S,
) -> Self
 
pub fn new( network: &Network, initial_tip: Option<(Height, Hash)>, state_service: S, ) -> Self
Return a checkpoint verification service for network, using the
hard-coded checkpoint list, and the provided state_service.
If initial_tip is Some(_), the verifier starts at that initial tip.
The initial tip can be between the checkpoints in the hard-coded
checkpoint list.
The checkpoint verifier holds a state service of type S, into which newly
verified blocks will be committed. This state is pluggable to allow for
testing or instrumentation.
This function should be called only once for a particular network, rather
than constructing multiple verification services for the same network. To
clone a CheckpointVerifier, you might need to wrap it in a
tower::Buffer service.
Sourcepub(crate) fn from_list(
    list: impl IntoIterator<Item = (Height, Hash)>,
    network: &Network,
    initial_tip: Option<(Height, Hash)>,
    state_service: S,
) -> Result<Self, VerifyCheckpointError>
 
pub(crate) fn from_list( list: impl IntoIterator<Item = (Height, Hash)>, network: &Network, initial_tip: Option<(Height, Hash)>, state_service: S, ) -> Result<Self, VerifyCheckpointError>
Return a checkpoint verification service using list, network,
initial_tip, and state_service.
Assumes that the provided genesis checkpoint is correct.
Callers should prefer CheckpointVerifier::new, which uses the
hard-coded checkpoint lists, or CheckpointList::from_list if you need
to specify a custom checkpoint list. See those functions for more
details.
This function is designed for use in tests.
Sourcepub(crate) fn from_checkpoint_list(
    checkpoint_list: Arc<CheckpointList>,
    network: &Network,
    initial_tip: Option<(Height, Hash)>,
    state_service: S,
) -> Self
 
pub(crate) fn from_checkpoint_list( checkpoint_list: Arc<CheckpointList>, network: &Network, initial_tip: Option<(Height, Hash)>, state_service: S, ) -> Self
Return a checkpoint verification service using checkpoint_list,
network, initial_tip, and state_service.
Assumes that the provided genesis checkpoint is correct.
Callers should prefer CheckpointVerifier::new, which uses the
hard-coded checkpoint lists. See that function for more details.
Sourcefn queued_block_diagnostics(&self, height: Height, hash: Hash)
 
fn queued_block_diagnostics(&self, height: Height, hash: Hash)
Update diagnostics for queued blocks.
Sourcefn verified_checkpoint_diagnostics(
    &self,
    verified_height: impl Into<Option<Height>>,
)
 
fn verified_checkpoint_diagnostics( &self, verified_height: impl Into<Option<Height>>, )
Update diagnostics for verified checkpoints.
Sourcefn finish_diagnostics(&self)
 
fn finish_diagnostics(&self)
Finish checkpoint verifier diagnostics.
Sourcefn reset_progress(&mut self, tip: Option<(Height, Hash)>)
 
fn reset_progress(&mut self, tip: Option<(Height, Hash)>)
Reset the verifier progress back to given tip.
Sourcefn previous_checkpoint_height(&self) -> Progress<Height>
 
fn previous_checkpoint_height(&self) -> Progress<Height>
Return the current verifier’s progress.
If verification has not started yet, returns BeforeGenesis,
or InitialTip(height) if there were cached verified blocks.
If verification is ongoing, returns PreviousCheckpoint(height).
height increases as checkpoints are verified.
If verification has finished, returns FinalCheckpoint.
Sourcefn current_start_bound(&self) -> Option<Bound<Height>>
 
fn current_start_bound(&self) -> Option<Bound<Height>>
Return the start of the current checkpoint range.
Returns None if verification has finished.
Sourcefn target_checkpoint_height(&self) -> TargetHeight
 
fn target_checkpoint_height(&self) -> TargetHeight
Return the target checkpoint height that we want to verify.
If we need more blocks, returns WaitingForBlocks.
If the queued blocks are continuous from the previous checkpoint to a
target checkpoint, returns Checkpoint(height). The target checkpoint
can be multiple checkpoints ahead of the previous checkpoint.
height increases as checkpoints are verified.
If verification has finished, returns FinishedVerifying.
Sourcefn previous_checkpoint_hash(&self) -> Progress<Hash>
 
fn previous_checkpoint_hash(&self) -> Progress<Hash>
Return the most recently verified checkpoint’s hash.
See previous_checkpoint_height() for details.
Sourcefn check_height(&self, height: Height) -> Result<(), VerifyCheckpointError>
 
fn check_height(&self, height: Height) -> Result<(), VerifyCheckpointError>
Check that height is valid and able to be verified.
Returns an error if:
- the block’s height is greater than the maximum checkpoint
 - there are no checkpoints
 - the block’s height is less than or equal to the previously verified checkpoint
 - verification has finished
 
Sourcefn update_progress(&mut self, verified_height: Height)
 
fn update_progress(&mut self, verified_height: Height)
Increase the current checkpoint height to verified_height,
Sourcefn check_block(
    &self,
    block: Arc<Block>,
) -> Result<CheckpointVerifiedBlock, VerifyCheckpointError>
 
fn check_block( &self, block: Arc<Block>, ) -> Result<CheckpointVerifiedBlock, VerifyCheckpointError>
Check that the block height, proof of work, and Merkle root are valid.
Returns a CheckpointVerifiedBlock with precalculated block data.
§Security
Checking the proof of work makes resource exhaustion attacks harder to carry out, because malicious blocks require a valid proof of work.
Checking the Merkle root ensures that the block hash binds the block contents. To prevent malleability (CVE-2012-2459), we also need to check whether the transaction hashes are unique.
Sourcefn queue_block(
    &mut self,
    block: Arc<Block>,
) -> Result<RequestBlock, VerifyCheckpointError>
 
fn queue_block( &mut self, block: Arc<Block>, ) -> Result<RequestBlock, VerifyCheckpointError>
Queue block for verification.
On success, returns a RequestBlock containing the block,
precalculated request data, and the queued result receiver.
Verification will finish when the chain to the next checkpoint is complete, and the caller will be notified via the channel.
If the block does not pass basic validity checks, returns an error immediately.
Sourcefn process_height(
    &mut self,
    height: Height,
    expected_hash: Hash,
) -> Option<QueuedBlock>
 
fn process_height( &mut self, height: Height, expected_hash: Hash, ) -> Option<QueuedBlock>
During checkpoint range processing, process all the blocks at height.
Returns the first valid block. If there is no valid block, returns None.
Sourcefn process_checkpoint_range(&mut self)
 
fn process_checkpoint_range(&mut self)
Try to verify from the previous checkpoint to a target checkpoint.
Send Ok for the blocks that are in the chain, and Err for side-chain
blocks.
Does nothing if we are waiting for more blocks, or if verification has finished.
Trait Implementations§
Source§impl<S> Debug for CheckpointVerifier<S>
 
impl<S> Debug for CheckpointVerifier<S>
Source§impl<S> Drop for CheckpointVerifier<S>
CheckpointVerifier rejects pending futures on drop.
 
impl<S> Drop for CheckpointVerifier<S>
CheckpointVerifier rejects pending futures on drop.
Source§impl<S> Service<Arc<Block>> for CheckpointVerifier<S>
The CheckpointVerifier service implementation.
 
impl<S> Service<Arc<Block>> for CheckpointVerifier<S>
The CheckpointVerifier service implementation.
After verification, the block futures resolve to their hashes.
Source§type Error = VerifyCheckpointError
 
type Error = VerifyCheckpointError
Source§type Future = Pin<Box<dyn Future<Output = Result<<CheckpointVerifier<S> as Service<Arc<Block>>>::Response, <CheckpointVerifier<S> as Service<Arc<Block>>>::Error>> + Send>>
 
type Future = Pin<Box<dyn Future<Output = Result<<CheckpointVerifier<S> as Service<Arc<Block>>>::Response, <CheckpointVerifier<S> as Service<Arc<Block>>>::Error>> + Send>>
Auto Trait Implementations§
impl<S> Freeze for CheckpointVerifier<S>where
    S: Freeze,
impl<S> !RefUnwindSafe for CheckpointVerifier<S>
impl<S> Send for CheckpointVerifier<S>
impl<S> !Sync for CheckpointVerifier<S>
impl<S> Unpin for CheckpointVerifier<S>where
    S: Unpin,
impl<S> !UnwindSafe for CheckpointVerifier<S>
Blanket Implementations§
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
§impl<T> Conv for T
 
impl<T> Conv for T
§impl<T> FmtForward for T
 
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
 
fn fmt_binary(self) -> FmtBinary<Self>where
    Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
 
fn fmt_display(self) -> FmtDisplay<Self>where
    Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
 
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
    Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
 
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
    Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
 
fn fmt_octal(self) -> FmtOctal<Self>where
    Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
 
fn fmt_pointer(self) -> FmtPointer<Self>where
    Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
 
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
    Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
 
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
    Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
 
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
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<S, Request> IsReady<Request> for Swhere
    S: Service<Request> + Send,
    Request: 'static,
 
impl<S, Request> IsReady<Request> for Swhere
    S: Service<Request> + Send,
    Request: 'static,
Source§fn is_ready(&mut self) -> Pin<Box<dyn Future<Output = bool> + Send + '_>>
 
fn is_ready(&mut self) -> Pin<Box<dyn Future<Output = bool> + Send + '_>>
Service] once, and return true if it is immediately ready to be called.§impl<D> OwoColorize for D
 
impl<D> OwoColorize for D
§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
    C: Color,
 
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
    C: Color,
§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
    C: Color,
 
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
    C: Color,
§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
 
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
 
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
 
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
 
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
 
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
 
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
 
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
 
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
 
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
 
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
 
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
 
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
 
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
 
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
 
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
 
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
 
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
 
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
 
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
 
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
 
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
 
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
 
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
    Color: DynColor,
 
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
    Color: DynColor,
OwoColorize::fg] or
a color-specific method, such as [OwoColorize::green], Read more§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
    Color: DynColor,
 
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
    Color: DynColor,
OwoColorize::bg] or
a color-specific method, such as [OwoColorize::on_yellow], Read more§fn fg_rgb<const R: u8, const G: u8, const B: u8>(
    &self,
) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
 
fn fg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> FgColorDisplay<'_, CustomColor<R, G, B>, Self>
§fn bg_rgb<const R: u8, const G: u8, const B: u8>(
    &self,
) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
 
fn bg_rgb<const R: u8, const G: u8, const B: u8>( &self, ) -> BgColorDisplay<'_, CustomColor<R, G, B>, Self>
§fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
 
fn truecolor(&self, r: u8, g: u8, b: u8) -> FgDynColorDisplay<'_, Rgb, Self>
§fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
 
fn on_truecolor(&self, r: u8, g: u8, b: u8) -> BgDynColorDisplay<'_, Rgb, Self>
§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
 
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
    R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
 
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
    &'a mut self,
    func: impl FnOnce(&'a mut B) -> R,
) -> R
 
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
 
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
 
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
 
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.§impl<T> Pointable for T
 
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
Source§impl<Response, Error> ResponseResult<Response, Error> for Response
 
impl<Response, Error> ResponseResult<Response, Error> for Response
Source§fn into_result(self) -> Result<Response, Error>
 
fn into_result(self) -> Result<Response, Error>
Result that can be sent as a response.§impl<T, Request> ServiceExt<Request> for Twhere
    T: Service<Request> + ?Sized,
 
impl<T, Request> ServiceExt<Request> for Twhere
    T: Service<Request> + ?Sized,
§fn ready(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
 
fn ready(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
§fn ready_and(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
 
fn ready_and(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
ServiceExt::ready method instead§fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
    Self: Sized,
 
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
    Self: Sized,
§fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
    Self: Sized,
 
fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
    Self: Sized,
Service, calling with the providing request once it is ready.§fn and_then<F>(self, f: F) -> AndThen<Self, F>
 
fn and_then<F>(self, f: F) -> AndThen<Self, F>
poll_ready method. Read more§fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
 
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
poll_ready method. Read more§fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
 
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
poll_ready method. Read more§fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
 
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
Result<Self::Response, Self::Error>)
to a different value, regardless of whether the future succeeds or
fails. Read more§fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
 
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
§fn filter<F, NewRequest>(self, filter: F) -> Filter<Self, F>where
    Self: Sized,
    F: Predicate<NewRequest>,
 
fn filter<F, NewRequest>(self, filter: F) -> Filter<Self, F>where
    Self: Sized,
    F: Predicate<NewRequest>,
§fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F>where
    Self: Sized,
    F: AsyncPredicate<NewRequest>,
 
fn filter_async<F, NewRequest>(self, filter: F) -> AsyncFilter<Self, F>where
    Self: Sized,
    F: AsyncPredicate<NewRequest>,
AsyncFilter that conditionally accepts or
rejects requests based on an [async predicate]. Read more§fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
 
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
§fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
 
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
§impl<T, Request> ServiceExt<Request> for Twhere
    T: Service<Request> + ?Sized,
 
impl<T, Request> ServiceExt<Request> for Twhere
    T: Service<Request> + ?Sized,
§fn ready(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
 
fn ready(&mut self) -> Ready<'_, Self, Request>where
    Self: Sized,
§fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
    Self: Sized,
 
fn ready_oneshot(self) -> ReadyOneshot<Self, Request>where
    Self: Sized,
§fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
    Self: Sized,
 
fn oneshot(self, req: Request) -> Oneshot<Self, Request>where
    Self: Sized,
Service, calling it with the provided request once it is ready.§fn and_then<F>(self, f: F) -> AndThen<Self, F>
 
fn and_then<F>(self, f: F) -> AndThen<Self, F>
poll_ready method. Read more§fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
 
fn map_response<F, Response>(self, f: F) -> MapResponse<Self, F>
poll_ready method. Read more§fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
 
fn map_err<F, Error>(self, f: F) -> MapErr<Self, F>
poll_ready method. Read more§fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
 
fn map_result<F, Response, Error>(self, f: F) -> MapResult<Self, F>
Result<Self::Response, Self::Error>)
to a different value, regardless of whether the future succeeds or
fails. Read more§fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
 
fn map_request<F, NewRequest>(self, f: F) -> MapRequest<Self, F>
§fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
 
fn then<F, Response, Error, Fut>(self, f: F) -> Then<Self, F>
§fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
 
fn map_future<F, Fut, Response, Error>(self, f: F) -> MapFuture<Self, F>
§impl<T> Tap for T
 
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
 
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
 
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
 
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
 
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
 
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
 
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
 
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
 
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.