Struct viz::Server [−][src]
pub struct Server<I, S, E = Exec> { /* fields omitted */ }
Expand description
A listening HTTP server that accepts connections in both HTTP1 and HTTP2 by default.
Server
is a Future
mapping a bound listener with a set of service
handlers. It is built using the Builder
, and the future
completes when the server has been shutdown. It should be run by an
Executor
.
Implementations
impl<I, IO, IE, S, E, B> Server<I, S, E> where
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
IO: 'static + AsyncRead + AsyncWrite + Unpin + Send,
S: MakeServiceRef<IO, Body, ResBody = B>,
B: 'static + Body + Send + Sync,
E: ConnStreamExec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, GracefulWatcher>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
<B as Body>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
impl<I, IO, IE, S, E, B> Server<I, S, E> where
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
IO: 'static + AsyncRead + AsyncWrite + Unpin + Send,
S: MakeServiceRef<IO, Body, ResBody = B>,
B: 'static + Body + Send + Sync,
E: ConnStreamExec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, GracefulWatcher>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
<B as Body>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
pub fn with_graceful_shutdown<F>(self, signal: F) -> Graceful<I, S, F, E> where
F: Future<Output = ()>,
pub fn with_graceful_shutdown<F>(self, signal: F) -> Graceful<I, S, F, E> where
F: Future<Output = ()>,
Prepares a server to handle graceful shutdown when the provided future completes.
Example
// Make a server from the previous examples...
let server = Server::bind(&([127, 0, 0, 1], 3000).into())
.serve(make_service);
// Prepare some signal for when the server should start shutting down...
let (tx, rx) = tokio::sync::oneshot::channel::<()>();
let graceful = server
.with_graceful_shutdown(async {
rx.await.ok();
});
// Await the `server` receiving the signal...
if let Err(e) = graceful.await {
eprintln!("server error: {}", e);
}
// And later, trigger the signal by calling `tx.send(())`.
let _ = tx.send(());
Tries to bind to the provided address, and returns a Builder
.
Create a new instance from a std::net::TcpListener
instance.
Returns the local address that this server is bound to.
Trait Implementations
impl<I, IO, IE, S, B, E> Future for Server<I, S, E> where
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
IO: 'static + AsyncRead + AsyncWrite + Unpin + Send,
S: MakeServiceRef<IO, Body, ResBody = B>,
B: 'static + Body,
E: ConnStreamExec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, NoopWatcher>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
<B as Body>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
impl<I, IO, IE, S, B, E> Future for Server<I, S, E> where
I: Accept<Conn = IO, Error = IE>,
IE: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
IO: 'static + AsyncRead + AsyncWrite + Unpin + Send,
S: MakeServiceRef<IO, Body, ResBody = B>,
B: 'static + Body,
E: ConnStreamExec<<<S as MakeServiceRef<IO, Body>>::Service as HttpService<Body>>::Future, B> + NewSvcExec<IO, <S as MakeServiceRef<IO, Body>>::Future, <S as MakeServiceRef<IO, Body>>::Service, E, NoopWatcher>,
<S as MakeServiceRef<IO, Body>>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
<B as Body>::Error: Into<Box<dyn Error + Send + Sync + 'static, Global>>,
Auto Trait Implementations
impl<I, S, E> RefUnwindSafe for Server<I, S, E> where
E: RefUnwindSafe,
I: RefUnwindSafe,
S: RefUnwindSafe,
impl<I, S, E> UnwindSafe for Server<I, S, E> where
E: UnwindSafe,
I: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Map this future’s output to a different type, returning a new future of the resulting type. Read more
Map this future’s output to a different type, returning a new future of the resulting type. Read more
Chain on a computation for when a future finished, passing the result of
the future to the provided closure f
. Read more
Wrap this future in an Either
future, making it the left-hand variant
of that Either
. Read more
Wrap this future in an Either
future, making it the right-hand variant
of that Either
. Read more
fn into_stream(self) -> IntoStream<Self>
fn into_stream(self) -> IntoStream<Self>
Convert this future into a single element stream. Read more
Flatten the execution of this future when the output of this future is itself another future. Read more
fn flatten_stream(self) -> FlattenStream<Self> where
Self::Output: Stream,
fn flatten_stream(self) -> FlattenStream<Self> where
Self::Output: Stream,
Flatten the execution of this future when the successful result of this future is a stream. Read more
Fuse a future such that poll
will never again be called once it has
completed. This method can be used to turn any Future
into a
FusedFuture
. Read more
Do something with the output of a future before passing it on. Read more
fn catch_unwind(self) -> CatchUnwind<Self>ⓘ where
Self: UnwindSafe,
fn catch_unwind(self) -> CatchUnwind<Self>ⓘ where
Self: UnwindSafe,
Catches unwinding panics while polling the future. Read more
Create a cloneable handle to this future where all handles will resolve to the same result. Read more
Wrap the future in a Box, pinning it. Read more
Wrap the future in a Box, pinning it. Read more
Turns a Future<Output = T>
into a
TryFuture<Ok = T, Error = ()
>. Read more
fn never_error(self) -> NeverError<Self>ⓘNotable traits for NeverError<Fut>impl<Fut> Future for NeverError<Fut> where
Map<Fut, OkFn<Infallible>>: Future, type Output = <Map<Fut, OkFn<Infallible>> as Future>::Output;
fn never_error(self) -> NeverError<Self>ⓘNotable traits for NeverError<Fut>impl<Fut> Future for NeverError<Fut> where
Map<Fut, OkFn<Infallible>>: Future, type Output = <Map<Fut, OkFn<Infallible>> as Future>::Output;
impl<Fut> Future for NeverError<Fut> where
Map<Fut, OkFn<Infallible>>: Future, type Output = <Map<Fut, OkFn<Infallible>> as Future>::Output;
Turns a Future<Output = T>
into a
TryFuture<Ok = T, Error = Never
>. Read more
fn poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output> where
Self: Unpin,
fn poll_unpin(&mut self, cx: &mut Context<'_>) -> Poll<Self::Output> where
Self: Unpin,
A convenience for calling Future::poll
on Unpin
future types.
fn now_or_never(self) -> Option<Self::Output>
fn now_or_never(self) -> Option<Self::Output>
Evaluates and consumes the future, returning the resulting output if
the future is ready after the first call to Future::poll
. Read more
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn instrument(self, span: Span) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
fn in_current_span(self) -> Instrumented<Self>ⓘNotable traits for Instrumented<T>impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
impl<T> Future for Instrumented<T> where
T: Future, type Output = <T as Future>::Output;
into_future
)The output that the future will produce on completion.
type Future = F
type Future = F
into_future
)Which kind of future are we turning this into?
into_future
)Creates a future from a value.
impl<Fut> TryFutureExt for Fut where
Fut: TryFuture + ?Sized,
impl<Fut> TryFutureExt for Fut where
Fut: TryFuture + ?Sized,
fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok> where
Self::Ok: Sink<Item>,
<Self::Ok as Sink<Item>>::Error == Self::Error,
fn flatten_sink<Item>(self) -> FlattenSink<Self, Self::Ok> where
Self::Ok: Sink<Item>,
<Self::Ok as Sink<Item>>::Error == Self::Error,
Flattens the execution of this future when the successful result of this
future is a [Sink
]. Read more
Maps this future’s success value to a different value. Read more
fn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E>ⓘ where
F: FnOnce(Self::Ok) -> T,
E: FnOnce(Self::Error) -> T,
fn map_ok_or_else<T, E, F>(self, e: E, f: F) -> MapOkOrElse<Self, F, E>ⓘ where
F: FnOnce(Self::Ok) -> T,
E: FnOnce(Self::Error) -> T,
Maps this future’s success value to a different value, and permits for error handling resulting in the same type. Read more
Maps this future’s error value to a different value. Read more
Executes another future after this one resolves successfully. The success value is passed to a closure to create this subsequent future. Read more
Executes another future if this one resolves to an error. The error value is passed to a closure to create this subsequent future. Read more
Do something with the success value of a future before passing it on. Read more
Do something with the error value of a future before passing it on. Read more
fn try_flatten(self) -> TryFlatten<Self, Self::Ok>ⓘ where
Self::Ok: TryFuture,
<Self::Ok as TryFuture>::Error == Self::Error,
fn try_flatten(self) -> TryFlatten<Self, Self::Ok>ⓘ where
Self::Ok: TryFuture,
<Self::Ok as TryFuture>::Error == Self::Error,
Flatten the execution of this future when the successful result of this future is another future. Read more
fn try_flatten_stream(self) -> TryFlattenStream<Self> where
Self::Ok: TryStream,
<Self::Ok as TryStream>::Error == Self::Error,
fn try_flatten_stream(self) -> TryFlattenStream<Self> where
Self::Ok: TryStream,
<Self::Ok as TryStream>::Error == Self::Error,
Flatten the execution of this future when the successful result of this future is a stream. Read more
fn unwrap_or_else<F>(self, f: F) -> UnwrapOrElse<Self, F>ⓘ where
F: FnOnce(Self::Error) -> Self::Ok,
fn unwrap_or_else<F>(self, f: F) -> UnwrapOrElse<Self, F>ⓘ where
F: FnOnce(Self::Error) -> Self::Ok,
fn into_future(self) -> IntoFuture<Self>ⓘ
fn into_future(self) -> IntoFuture<Self>ⓘ
pub fn vzip(self) -> V
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
where
S: Into<Dispatch>,
impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
fn with_current_subscriber(self) -> WithDispatch<Self>ⓘNotable traits for WithDispatch<T>impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
impl<T> Future for WithDispatch<T> where
T: Future, type Output = <T as Future>::Output;
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more