pub struct Endpoint { /* private fields */ }
Expand description
Represents a socket using the QUIC protocol to communicate with peers.
Stream
Receives incoming Connection
s through [Stream
].
Implementations§
§impl Endpoint
impl Endpoint
pub fn new_client() -> Result<Endpoint, Config>
pub fn new_client() -> Result<Endpoint, Config>
Simplified version of creating a client. See Builder
for more
sophisticated configuration options. Must be called from inside a Tokio
Runtime
.
Notes
This configuration will not be able to receive incoming
Connection
s.
Errors
std::io::Error
if the socket couldn’t be bound to the given
address
.
Panics
If not called from inside a Tokio Runtime
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
pub fn new_server(port: u16, key_pair: KeyPair) -> Result<Endpoint, Config>
pub fn new_server(port: u16, key_pair: KeyPair) -> Result<Endpoint, Config>
Simplified version of creating a server. See Builder
for more
sophisticated configuration options. Must be called from inside a Tokio
Runtime
.
Errors
std::io::Error
if the socket couldn’t be bound to the given
address
.
Panics
- if the given
KeyPair
is invalid - can’t happen if properly validated throughKeyPair::from_parts
- if not called from inside a Tokio
Runtime
Examples
use fabruic::{Endpoint, KeyPair};
let endpoint = Endpoint::new_server(0, KeyPair::new_self_signed("self-signed"))?;
pub async fn connect<U>(
&self,
url: U
) -> impl Future<Output = Result<Connecting, Connect>>where
U: AsRef<str>,
pub async fn connect<U>( &self, url: U ) -> impl Future<Output = Result<Connecting, Connect>>where U: AsRef<str>,
Establishes a new Connection
to a server. The
servers Certificate
will be validated aggainst the root certificate
store and the domain in the URL.
Attempts to resolve the IP from the given URL. Uses
trust-dns
by default if the crate feature trust-dns
is enabled.
Otherwise ToSocketAddrs
is used.
See Builder::set_trust_dns
or Builder::disable_trust_dns
for
more control.
Notes
The following settings are used when using
trust-dns
:
- all system configurations are ignored, see
Builder::set_hosts_file
- Cloudflare with DoH is used as the name server
- DNSSEC is enabled, see
Builder::set_dnssec
- IPv6 is preferred over IPv4 if the bound socket is IPv6
Errors
error::Connect::ParseUrl
if the URL couldn’t be parsederror::Connect::Domain
if the URL didn’t contain a domainerror::Connect::Port
if the URL didn’t contain a porterror::Connect::ParseDomain
if the domain couldn’t be parsederror::Connect::TrustDns
if the URL couldn’t be resolved to an IP address withtrust-dns
error::Connect::StdDns
if the URL couldn’t be resolved to an IP address withToSocketAddrs
error::Connect::NoIp
if no IP address was found for that domain
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
// not going to actually work because `localhost` can't have a valid certificate
let connecting = endpoint.connect("quic://localhost:443").await?;
pub async fn connect_pinned<U>(
&self,
url: U,
server_certificate: &Certificate,
client_key_pair: Option<KeyPair>
) -> impl Future<Output = Result<Connecting, Connect>>where
U: AsRef<str>,
pub async fn connect_pinned<U>( &self, url: U, server_certificate: &Certificate, client_key_pair: Option<KeyPair> ) -> impl Future<Output = Result<Connecting, Connect>>where U: AsRef<str>,
Establishes a new Connection
to a server.
See connect
for more information on host name
resolution.
Notes
The root certificate store will be ignored and the given Certificate
will validate the server.
A client certificate KeyPair
set with
Builder::set_client_key_pair
will be ignored, use client_key_pair
to add a client certificate to this connection.
This method is intended for direct connection to a known server, the
domain name in the URL is not checked against the Certificate
.
Multiple domain names in the Certificate
aren’t supported.
Errors
error::Connect::MultipleDomains
if multiple domains are present in theCertificate
, which isn’t supportederror::Connect::ParseUrl
if the URL couldn’t be parsederror::Connect::Domain
if the URL didn’t contain a domainerror::Connect::Port
if the URL didn’t contain a porterror::Connect::ParseDomain
if the domain couldn’t be parsederror::Connect::TrustDns
if the URL couldn’t be resolved to an IP address withtrust-dns
error::Connect::StdDns
if the URL couldn’t be resolved to an IP address withToSocketAddrs
error::Connect::NoIp
if no IP address was found for that domain
Panics
Panics if the given Certificate
or KeyPair
are invalid. Can’t
happen if they were properly validated through Certificate::from_der
or KeyPair::from_parts
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
// the server certificate has to be imported from somewhere else
let connecting = endpoint
.connect_pinned("quic://localhost:443", &server_certificate, None)
.await?;
pub fn local_address(&self) -> Result<SocketAddr, Error>
pub fn local_address(&self) -> Result<SocketAddr, Error>
Get the local SocketAddr
the underlying socket is bound to.
Errors
std::io::Error
if aquiring the local address failed.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
assert!(endpoint.local_address().is_ok());
pub async fn close(&self) -> impl Future<Output = ()>
pub async fn close(&self) -> impl Future<Output = ()>
Close all of this Endpoint
’s Connection
s
immediately and cease accepting new Connection
s.
To close an Endpoint
gracefully use
close_incoming
,
Sender::finish
and
wait_idle
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
endpoint.close();
pub async fn close_incoming(
&self
) -> impl Future<Output = Result<(), AlreadyClosed>>
pub async fn close_incoming( &self ) -> impl Future<Output = Result<(), AlreadyClosed>>
Prevents any new incoming connections. Already incoming connections will
finish first. This will always return error::AlreadyClosed
if the
Endpoint
wasn’t started with a listener.
See Builder::set_server_key_pair
.
Errors
error::AlreadyClosed
if it was already closed.
Examples
use fabruic::{Endpoint, KeyPair};
let endpoint = Endpoint::new_server(0, KeyPair::new_self_signed("test"))?;
assert!(endpoint.close_incoming().await.is_ok());
pub async fn wait_idle(&self) -> impl Future<Output = ()>
pub async fn wait_idle(&self) -> impl Future<Output = ()>
Wait for all Connection
s to the Endpoint
to
be cleanly shut down. Does not close existing connections or cause
incoming connections to be rejected. See
close_incoming
.
Examples
use fabruic::Endpoint;
let endpoint = Endpoint::new_client()?;
endpoint.wait_idle().await;
Trait Implementations§
§impl Dangerous for Endpoint
impl Dangerous for Endpoint
§fn connect_unverified<'life0, 'async_trait, U>(
endpoint: &'life0 Endpoint,
url: U,
client_key_pair: Option<KeyPair>
) -> Pin<Box<dyn Future<Output = Result<Connecting, Connect>> + Send + 'async_trait, Global>>where
'life0: 'async_trait,
U: 'async_trait + AsRef<str> + Send,
Endpoint: 'async_trait,
fn connect_unverified<'life0, 'async_trait, U>( endpoint: &'life0 Endpoint, url: U, client_key_pair: Option<KeyPair> ) -> Pin<Box<dyn Future<Output = Result<Connecting, Connect>> + Send + 'async_trait, Global>>where 'life0: 'async_trait, U: 'async_trait + AsRef<str> + Send, Endpoint: 'async_trait,
Connection
to a server without
verifying the servers Certificate
. The servers
CertificateChain
can still be manually
insepcted through
Connection::peer_identity
. Read more§impl FusedStream for Endpoint
impl FusedStream for Endpoint
§fn is_terminated(&self) -> bool
fn is_terminated(&self) -> bool
true
if the stream should no longer be polled.§impl Stream for Endpoint
impl Stream for Endpoint
§type Item = Connecting
type Item = Connecting
Auto Trait Implementations§
impl !RefUnwindSafe for Endpoint
impl Send for Endpoint
impl Sync for Endpoint
impl Unpin for Endpoint
impl !UnwindSafe for Endpoint
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere T: 'a,
§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> 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>
§impl<T> StreamExt for Twhere
T: Stream + ?Sized,
impl<T> StreamExt for Twhere T: Stream + ?Sized,
§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where Self: Unpin,
§fn into_future(self) -> StreamFuture<Self>where
Self: Sized + Unpin,
fn into_future(self) -> StreamFuture<Self>where Self: Sized + Unpin,
§fn map<T, F>(self, f: F) -> Map<Self, F>where
F: FnMut(Self::Item) -> T,
Self: Sized,
fn map<T, F>(self, f: F) -> Map<Self, F>where F: FnMut(Self::Item) -> T, Self: Sized,
§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where Self: Sized,
§fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
Self: Sized,
fn filter<Fut, F>(self, f: F) -> Filter<Self, Fut, F>where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,
§fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = Option<T>>,
Self: Sized,
fn filter_map<Fut, T, F>(self, f: F) -> FilterMap<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = Option<T>>, Self: Sized,
§fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future,
Self: Sized,
fn then<Fut, F>(self, f: F) -> Then<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future, Self: Sized,
§fn collect<C>(self) -> Collect<Self, C>where
C: Default + Extend<Self::Item>,
Self: Sized,
fn collect<C>(self) -> Collect<Self, C>where C: Default + Extend<Self::Item>, Self: Sized,
§fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>where
FromA: Default + Extend<A>,
FromB: Default + Extend<B>,
Self: Sized + Stream<Item = (A, B)>,
fn unzip<A, B, FromA, FromB>(self) -> Unzip<Self, FromA, FromB>where FromA: Default + Extend<A>, FromB: Default + Extend<B>, Self: Sized + Stream<Item = (A, B)>,
§fn concat(self) -> Concat<Self>where
Self: Sized,
Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,
fn concat(self) -> Concat<Self>where Self: Sized, Self::Item: Extend<<Self::Item as IntoIterator>::Item> + IntoIterator + Default,
§fn count(self) -> Count<Self>where
Self: Sized,
fn count(self) -> Count<Self>where Self: Sized,
§fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>where
F: FnMut(T, Self::Item) -> Fut,
Fut: Future<Output = T>,
Self: Sized,
fn fold<T, Fut, F>(self, init: T, f: F) -> Fold<Self, Fut, T, F>where F: FnMut(T, Self::Item) -> Fut, Fut: Future<Output = T>, Self: Sized,
§fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = bool>,
Self: Sized,
fn any<Fut, F>(self, f: F) -> Any<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,
true
if any element in stream satisfied a predicate. Read more§fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = bool>,
Self: Sized,
fn all<Fut, F>(self, f: F) -> All<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,
true
if all element in stream satisfied a predicate. Read more§fn flatten(self) -> Flatten<Self>where
Self::Item: Stream,
Self: Sized,
fn flatten(self) -> Flatten<Self>where Self::Item: Stream, Self: Sized,
§fn flatten_unordered(
self,
limit: impl Into<Option<usize>>
) -> FlattenUnorderedWithFlowController<Self, ()>where
Self::Item: Stream + Unpin,
Self: Sized,
fn flatten_unordered( self, limit: impl Into<Option<usize>> ) -> FlattenUnorderedWithFlowController<Self, ()>where Self::Item: Stream + Unpin, Self: Sized,
§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where
F: FnMut(Self::Item) -> U,
U: Stream,
Self: Sized,
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>where F: FnMut(Self::Item) -> U, U: Stream, Self: Sized,
§fn flat_map_unordered<U, F>(
self,
limit: impl Into<Option<usize>>,
f: F
) -> FlatMapUnordered<Self, U, F>where
U: Stream + Unpin,
F: FnMut(Self::Item) -> U,
Self: Sized,
fn flat_map_unordered<U, F>( self, limit: impl Into<Option<usize>>, f: F ) -> FlatMapUnordered<Self, U, F>where U: Stream + Unpin, F: FnMut(Self::Item) -> U, Self: Sized,
StreamExt::map
] but flattens nested Stream
s
and polls them concurrently, yielding items in any order, as they made
available. Read more§fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>where
F: FnMut(&mut S, Self::Item) -> Fut,
Fut: Future<Output = Option<B>>,
Self: Sized,
fn scan<S, B, Fut, F>(self, initial_state: S, f: F) -> Scan<Self, S, Fut, F>where F: FnMut(&mut S, Self::Item) -> Fut, Fut: Future<Output = Option<B>>, Self: Sized,
StreamExt::fold
] that holds internal state
and produces a new stream. Read more§fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
Self: Sized,
fn skip_while<Fut, F>(self, f: F) -> SkipWhile<Self, Fut, F>where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,
true
. Read more§fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>where
F: FnMut(&Self::Item) -> Fut,
Fut: Future<Output = bool>,
Self: Sized,
fn take_while<Fut, F>(self, f: F) -> TakeWhile<Self, Fut, F>where F: FnMut(&Self::Item) -> Fut, Fut: Future<Output = bool>, Self: Sized,
true
. Read more§fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>where
Fut: Future,
Self: Sized,
fn take_until<Fut>(self, fut: Fut) -> TakeUntil<Self, Fut>where Fut: Future, Self: Sized,
§fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = ()>,
Self: Sized,
fn for_each<Fut, F>(self, f: F) -> ForEach<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,
§fn for_each_concurrent<Fut, F>(
self,
limit: impl Into<Option<usize>>,
f: F
) -> ForEachConcurrent<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future<Output = ()>,
Self: Sized,
fn for_each_concurrent<Fut, F>( self, limit: impl Into<Option<usize>>, f: F ) -> ForEachConcurrent<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future<Output = ()>, Self: Sized,
§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where Self: Sized,
n
items of the underlying stream. Read more§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where Self: Sized,
n
items of the underlying stream. Read more§fn catch_unwind(self) -> CatchUnwind<Self>where
Self: Sized + UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>where Self: Sized + UnwindSafe,
§fn boxed<'a>(
self
) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a, Global>>where
Self: Sized + Send + 'a,
fn boxed<'a>( self ) -> Pin<Box<dyn Stream<Item = Self::Item> + Send + 'a, Global>>where Self: Sized + Send + 'a,
§fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a, Global>>where
Self: Sized + 'a,
fn boxed_local<'a>(self) -> Pin<Box<dyn Stream<Item = Self::Item> + 'a, Global>>where Self: Sized + 'a,
§fn buffered(self, n: usize) -> Buffered<Self>where
Self::Item: Future,
Self: Sized,
fn buffered(self, n: usize) -> Buffered<Self>where Self::Item: Future, Self: Sized,
§fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>where
Self::Item: Future,
Self: Sized,
fn buffer_unordered(self, n: usize) -> BufferUnordered<Self>where Self::Item: Future, Self: Sized,
§fn zip<St>(self, other: St) -> Zip<Self, St>where
St: Stream,
Self: Sized,
fn zip<St>(self, other: St) -> Zip<Self, St>where St: Stream, Self: Sized,
§fn chain<St>(self, other: St) -> Chain<Self, St>where
St: Stream<Item = Self::Item>,
Self: Sized,
fn chain<St>(self, other: St) -> Chain<Self, St>where St: Stream<Item = Self::Item>, Self: Sized,
§fn peekable(self) -> Peekable<Self>where
Self: Sized,
fn peekable(self) -> Peekable<Self>where Self: Sized,
peek
method. Read more§fn chunks(self, capacity: usize) -> Chunks<Self>where
Self: Sized,
fn chunks(self, capacity: usize) -> Chunks<Self>where Self: Sized,
§fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where
Self: Sized,
fn ready_chunks(self, capacity: usize) -> ReadyChunks<Self>where Self: Sized,
§fn forward<S>(self, sink: S) -> Forward<Self, S>where
S: Sink<Self::Ok, Error = Self::Error>,
Self: TryStream + Sized,
fn forward<S>(self, sink: S) -> Forward<Self, S>where S: Sink<Self::Ok, Error = Self::Error>, Self: TryStream + Sized,
§fn inspect<F>(self, f: F) -> Inspect<Self, F>where
F: FnMut(&Self::Item),
Self: Sized,
fn inspect<F>(self, f: F) -> Inspect<Self, F>where F: FnMut(&Self::Item), Self: Sized,
§fn left_stream<B>(self) -> Either<Self, B>where
B: Stream<Item = Self::Item>,
Self: Sized,
fn left_stream<B>(self) -> Either<Self, B>where B: Stream<Item = Self::Item>, Self: Sized,
§fn right_stream<B>(self) -> Either<B, Self>where
B: Stream<Item = Self::Item>,
Self: Sized,
fn right_stream<B>(self) -> Either<B, Self>where B: Stream<Item = Self::Item>, Self: Sized,
§fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where
Self: Unpin,
fn poll_next_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Option<Self::Item>>where Self: Unpin,
Stream::poll_next
] on Unpin
stream types.§fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where
Self: Unpin + FusedStream,
fn select_next_some(&mut self) -> SelectNextSome<'_, Self>where Self: Unpin + FusedStream,
§impl<St> StreamExt for Stwhere
St: Stream + ?Sized,
impl<St> StreamExt for Stwhere St: Stream + ?Sized,
§fn next(&mut self) -> Next<'_, Self>where
Self: Unpin,
fn next(&mut self) -> Next<'_, Self>where Self: Unpin,
None
if the
stream is finished. Read more§fn try_next<T, E>(&mut self) -> TryNext<'_, Self>where
Self: Stream<Item = Result<T, E>> + Unpin,
fn try_next<T, E>(&mut self) -> TryNext<'_, Self>where Self: Stream<Item = Result<T, E>> + Unpin,
§fn map<T, F>(self, f: F) -> Map<Self, F>where
F: FnMut(Self::Item) -> T,
Self: Sized,
fn map<T, F>(self, f: F) -> Map<Self, F>where F: FnMut(Self::Item) -> T, Self: Sized,
§fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>where
F: FnMut(Self::Item) -> Option<T>,
Self: Sized,
fn map_while<T, F>(self, f: F) -> MapWhile<Self, F>where F: FnMut(Self::Item) -> Option<T>, Self: Sized,
None
. Read more§fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>where
F: FnMut(Self::Item) -> Fut,
Fut: Future,
Self: Sized,
fn then<F, Fut>(self, f: F) -> Then<Self, Fut, F>where F: FnMut(Self::Item) -> Fut, Fut: Future, Self: Sized,
§fn merge<U>(self, other: U) -> Merge<Self, U>where
U: Stream<Item = Self::Item>,
Self: Sized,
fn merge<U>(self, other: U) -> Merge<Self, U>where U: Stream<Item = Self::Item>, Self: Sized,
§fn filter<F>(self, f: F) -> Filter<Self, F>where
F: FnMut(&Self::Item) -> bool,
Self: Sized,
fn filter<F>(self, f: F) -> Filter<Self, F>where F: FnMut(&Self::Item) -> bool, Self: Sized,
§fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>where
F: FnMut(Self::Item) -> Option<T>,
Self: Sized,
fn filter_map<T, F>(self, f: F) -> FilterMap<Self, F>where F: FnMut(Self::Item) -> Option<T>, Self: Sized,
§fn fuse(self) -> Fuse<Self>where
Self: Sized,
fn fuse(self) -> Fuse<Self>where Self: Sized,
None
. Read more§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where Self: Sized,
n
items of the underlying stream. Read more§fn take_while<F>(self, f: F) -> TakeWhile<Self, F>where
F: FnMut(&Self::Item) -> bool,
Self: Sized,
fn take_while<F>(self, f: F) -> TakeWhile<Self, F>where F: FnMut(&Self::Item) -> bool, Self: Sized,
true
. Read more§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where Self: Sized,
n
first items of the
underlying stream. Read more§fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>where
F: FnMut(&Self::Item) -> bool,
Self: Sized,
fn skip_while<F>(self, f: F) -> SkipWhile<Self, F>where F: FnMut(&Self::Item) -> bool, Self: Sized,
true
. Read more