Files
aho_corasick
ansi_term
atty
backtrace
backtrace_sys
bitflags
blindbid
block_buffer
block_padding
bulletproofs
r1cs
range_proof
byte_tools
byteorder
cfg_if
chrono
format
naive
offset
clap
app
args
completions
clear_on_drop
curve25519_dalek
backend
digest
dusk_blindbidproof
dusk_tlv
dusk_uds
env_logger
filter
fmt
failure
failure_derive
fake_simd
futures
futures_channel
futures_core
futures_executor
futures_io
futures_macro
futures_sink
futures_task
futures_util
async_await
future
future
try_future
io
lock
sink
stream
futures_unordered
stream
buffer_unordered.rsbuffered.rscatch_unwind.rschain.rschunks.rscollect.rsconcat.rsenumerate.rsfilter.rsfilter_map.rsflatten.rsfold.rsfor_each.rsfor_each_concurrent.rsforward.rsfuse.rsinspect.rsinto_future.rsmap.rsmod.rsnext.rspeek.rsselect_next_some.rsskip.rsskip_while.rssplit.rstake.rstake_while.rsthen.rszip.rs
try_stream
task
generic_array
humantime
keccak
lazy_static
libc
unix
log
memchr
merlin
num_cpus
num_integer
num_traits
opaque_debug
packed_simd
api
cast
cmp
fmt
from
into_bits
math
float
minimal
ops
ptr
reductions
slice
codegen
math
float
reductions
testing
pin_utils
proc_macro2
proc_macro_hack
proc_macro_nested
quick_error
quote
rand
distributions
prng
rngs
seq
rand_chacha
rand_core
rand_hc
rand_isaac
rand_jitter
rand_os
rand_pcg
rand_xorshift
regex
regex_syntax
ast
hir
unicode_tables
rustc_demangle
serde
de
private
ser
serde_derive
sha2
sha3
slab
strsim
subtle
syn
attr.rsbigint.rsbuffer.rscustom_keyword.rscustom_punctuation.rsdata.rsderive.rsdiscouraged.rserror.rsexport.rsexpr.rsext.rsfile.rsgenerics.rsgroup.rsident.rsitem.rslib.rslifetime.rslit.rslookahead.rsmac.rsmacros.rsop.rsparse.rsparse_macro_input.rsparse_quote.rspat.rspath.rsprint.rspunctuated.rssealed.rsspan.rsspanned.rsstmt.rsthread.rstoken.rstt.rsty.rs
synstructure
termcolor
textwrap
thread_local
time
typenum
unicode_width
unicode_xid
vec_map
>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
use core::pin::Pin; use futures_core::future::{FusedFuture, Future, TryFuture}; use futures_core::task::{Context, Poll}; use pin_utils::{unsafe_pinned, unsafe_unpinned}; /// Future for the [`inspect_err`](super::TryFutureExt::inspect_err) method. #[derive(Debug)] #[must_use = "futures do nothing unless you `.await` or poll them"] pub struct InspectErr<Fut, F> { future: Fut, f: Option<F>, } impl<Fut: Unpin, F> Unpin for InspectErr<Fut, F> {} impl<Fut, F> InspectErr<Fut, F> where Fut: TryFuture, F: FnOnce(&Fut::Error), { unsafe_pinned!(future: Fut); unsafe_unpinned!(f: Option<F>); pub(super) fn new(future: Fut, f: F) -> Self { Self { future, f: Some(f) } } } impl<Fut, F> FusedFuture for InspectErr<Fut, F> where Fut: TryFuture + FusedFuture, F: FnOnce(&Fut::Error), { fn is_terminated(&self) -> bool { self.future.is_terminated() } } impl<Fut, F> Future for InspectErr<Fut, F> where Fut: TryFuture, F: FnOnce(&Fut::Error), { type Output = Result<Fut::Ok, Fut::Error>; fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> { let e = ready!(self.as_mut().future().try_poll(cx)); if let Err(e) = &e { self.as_mut().f().take().expect("cannot poll InspectErr twice")(e); } Poll::Ready(e) } }