Struct MethodRouter
pub struct MethodRouter<S = (), E = Infallible> {
get: MethodEndpoint<S, E>,
head: MethodEndpoint<S, E>,
delete: MethodEndpoint<S, E>,
options: MethodEndpoint<S, E>,
patch: MethodEndpoint<S, E>,
post: MethodEndpoint<S, E>,
put: MethodEndpoint<S, E>,
trace: MethodEndpoint<S, E>,
connect: MethodEndpoint<S, E>,
fallback: Fallback<S, E>,
allow_header: AllowHeader,
}Expand description
A [Service] that accepts requests based on a MethodFilter and
allows chaining additional handlers and services.
§When does MethodRouter implement [Service]?
Whether or not MethodRouter implements [Service] depends on the state type it requires.
use tower::Service;
use axum::{routing::get, extract::{State, Request}, body::Body};
// this `MethodRouter` doesn't require any state, i.e. the state is `()`,
let method_router = get(|| async {});
// and thus it implements `Service`
assert_service(method_router);
// this requires a `String` and doesn't implement `Service`
let method_router = get(|_: State<String>| async {});
// until you provide the `String` with `.with_state(...)`
let method_router_with_state = method_router.with_state(String::new());
// and then it implements `Service`
assert_service(method_router_with_state);
// helper to check that a value implements `Service`
fn assert_service<S>(service: S)
where
S: Service<Request>,
{}Fields§
§get: MethodEndpoint<S, E>§head: MethodEndpoint<S, E>§delete: MethodEndpoint<S, E>§options: MethodEndpoint<S, E>§patch: MethodEndpoint<S, E>§post: MethodEndpoint<S, E>§put: MethodEndpoint<S, E>§trace: MethodEndpoint<S, E>§connect: MethodEndpoint<S, E>§fallback: Fallback<S, E>§allow_header: AllowHeaderImplementations§
§impl<S> MethodRouter<S>where
S: Clone,
impl<S> MethodRouter<S>where
S: Clone,
pub fn on<H, T>(self, filter: MethodFilter, handler: H) -> MethodRouter<S>
pub fn on<H, T>(self, filter: MethodFilter, handler: H) -> MethodRouter<S>
Chain an additional handler that will accept requests matching the given
MethodFilter.
§Example
use axum::{
routing::get,
Router,
routing::MethodFilter
};
async fn handler() {}
async fn other_handler() {}
// Requests to `GET /` will go to `handler` and `DELETE /` will go to
// `other_handler`
let app = Router::new().route("/", get(handler).on(MethodFilter::DELETE, other_handler));pub fn connect<H, T>(self, handler: H) -> MethodRouter<S>
pub fn connect<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept CONNECT requests.
See MethodFilter::CONNECT for when you’d want to use this,
and MethodRouter::get for an example.
pub fn delete<H, T>(self, handler: H) -> MethodRouter<S>
pub fn delete<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept DELETE requests.
See MethodRouter::get for an example.
pub fn get<H, T>(self, handler: H) -> MethodRouter<S>
pub fn get<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept GET requests.
§Example
use axum::{routing::post, Router};
async fn handler() {}
async fn other_handler() {}
// Requests to `POST /` will go to `handler` and `GET /` will go to
// `other_handler`.
let app = Router::new().route("/", post(handler).get(other_handler));Note that get routes will also be called for HEAD requests but will have
the response body removed. Make sure to add explicit HEAD routes
afterwards.
pub fn head<H, T>(self, handler: H) -> MethodRouter<S>
pub fn head<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept HEAD requests.
See MethodRouter::get for an example.
pub fn options<H, T>(self, handler: H) -> MethodRouter<S>
pub fn options<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept OPTIONS requests.
See MethodRouter::get for an example.
pub fn patch<H, T>(self, handler: H) -> MethodRouter<S>
pub fn patch<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept PATCH requests.
See MethodRouter::get for an example.
pub fn post<H, T>(self, handler: H) -> MethodRouter<S>
pub fn post<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept POST requests.
See MethodRouter::get for an example.
pub fn put<H, T>(self, handler: H) -> MethodRouter<S>
pub fn put<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept PUT requests.
See MethodRouter::get for an example.
pub fn trace<H, T>(self, handler: H) -> MethodRouter<S>
pub fn trace<H, T>(self, handler: H) -> MethodRouter<S>
Chain an additional handler that will only accept TRACE requests.
See MethodRouter::get for an example.
§impl MethodRouter
impl MethodRouter
pub fn into_make_service(self) -> IntoMakeService<MethodRouter>
pub fn into_make_service(self) -> IntoMakeService<MethodRouter>
Convert the router into a MakeService.
This allows you to serve a single MethodRouter if you don’t need any
routing based on the path:
use axum::{
handler::Handler,
http::{Uri, Method},
response::IntoResponse,
routing::get,
};
use std::net::SocketAddr;
async fn handler(method: Method, uri: Uri, body: String) -> String {
format!("received `{method} {uri}` with body `{body:?}`")
}
let router = get(handler).post(handler);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, router.into_make_service()).await.unwrap();pub fn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<MethodRouter, C>
Available on crate feature tokio only.
pub fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<MethodRouter, C>
tokio only.Convert the router into a MakeService which stores information
about the incoming connection.
See Router::into_make_service_with_connect_info for more details.
use axum::{
handler::Handler,
response::IntoResponse,
extract::ConnectInfo,
routing::get,
};
use std::net::SocketAddr;
async fn handler(ConnectInfo(addr): ConnectInfo<SocketAddr>) -> String {
format!("Hello {addr}")
}
let router = get(handler).post(handler);
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
axum::serve(listener, router.into_make_service()).await.unwrap();§impl<S, E> MethodRouter<S, E>where
S: Clone,
impl<S, E> MethodRouter<S, E>where
S: Clone,
pub fn new() -> MethodRouter<S, E>
pub fn new() -> MethodRouter<S, E>
Create a default MethodRouter that will respond with 405 Method Not Allowed to all
requests.
pub fn with_state<S2>(self, state: S) -> MethodRouter<S2, E>
pub fn with_state<S2>(self, state: S) -> MethodRouter<S2, E>
Provide the state for the router.
pub fn on_service<T>(self, filter: MethodFilter, svc: T) -> MethodRouter<S, E>
pub fn on_service<T>(self, filter: MethodFilter, svc: T) -> MethodRouter<S, E>
Chain an additional service that will accept requests matching the given
MethodFilter.
§Example
use axum::{
extract::Request,
Router,
routing::{MethodFilter, on_service},
body::Body,
};
use http::Response;
use std::convert::Infallible;
let service = tower::service_fn(|request: Request| async {
Ok::<_, Infallible>(Response::new(Body::empty()))
});
// Requests to `DELETE /` will go to `service`
let app = Router::new().route("/", on_service(MethodFilter::DELETE, service));pub fn connect_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn connect_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept CONNECT requests.
See MethodFilter::CONNECT for when you’d want to use this,
and MethodRouter::get_service for an example.
pub fn delete_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn delete_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept DELETE requests.
See MethodRouter::get_service for an example.
pub fn get_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn get_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept GET requests.
§Example
use axum::{
extract::Request,
Router,
routing::post_service,
body::Body,
};
use http::Response;
use std::convert::Infallible;
let service = tower::service_fn(|request: Request| async {
Ok::<_, Infallible>(Response::new(Body::empty()))
});
let other_service = tower::service_fn(|request: Request| async {
Ok::<_, Infallible>(Response::new(Body::empty()))
});
// Requests to `POST /` will go to `service` and `GET /` will go to
// `other_service`.
let app = Router::new().route("/", post_service(service).get_service(other_service));Note that get routes will also be called for HEAD requests but will have
the response body removed. Make sure to add explicit HEAD routes
afterwards.
pub fn head_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn head_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept HEAD requests.
See MethodRouter::get_service for an example.
pub fn options_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn options_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept OPTIONS requests.
See MethodRouter::get_service for an example.
pub fn patch_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn patch_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept PATCH requests.
See MethodRouter::get_service for an example.
pub fn post_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn post_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept POST requests.
See MethodRouter::get_service for an example.
pub fn put_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn put_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept PUT requests.
See MethodRouter::get_service for an example.
pub fn trace_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn trace_service<T>(self, svc: T) -> MethodRouter<S, E>
Chain an additional service that will only accept TRACE requests.
See MethodRouter::get_service for an example.
pub fn fallback_service<T>(self, svc: T) -> MethodRouter<S, E>
pub fn fallback_service<T>(self, svc: T) -> MethodRouter<S, E>
Add a fallback service to the router.
This service will be called if no routes matches the incoming request.
use axum::{
Router,
routing::get,
handler::Handler,
response::IntoResponse,
http::{StatusCode, Method, Uri},
};
let handler = get(|| async {}).fallback(fallback);
let app = Router::new().route("/", handler);
async fn fallback(method: Method, uri: Uri) -> (StatusCode, String) {
(StatusCode::NOT_FOUND, format!("`{method}` not allowed for {uri}"))
}§When used with MethodRouter::merge
Two routers that both have a fallback cannot be merged. Doing so results in a panic:
use axum::{
routing::{get, post},
handler::Handler,
response::IntoResponse,
http::{StatusCode, Uri},
};
let one = get(|| async {}).fallback(fallback_one);
let two = post(|| async {}).fallback(fallback_two);
let method_route = one.merge(two);
async fn fallback_one() -> impl IntoResponse { /* ... */ }
async fn fallback_two() -> impl IntoResponse { /* ... */ }§Setting the Allow header
By default MethodRouter will set the Allow header when returning 405 Method Not Allowed. This is also done when the fallback is used unless the response
generated by the fallback already sets the Allow header.
This means if you use fallback to accept additional methods, you should make
sure you set the Allow header correctly.
pub fn layer<L, NewError>(self, layer: L) -> MethodRouter<S, NewError>where
L: Layer<Route<E>> + Clone + Send + Sync + 'static,
<L as Layer<Route<E>>>::Service: Service<Request<Body>> + Clone + Send + Sync + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Response: IntoResponse + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Error: Into<NewError> + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Future: Send + 'static,
E: 'static,
S: 'static,
NewError: 'static,
pub fn layer<L, NewError>(self, layer: L) -> MethodRouter<S, NewError>where
L: Layer<Route<E>> + Clone + Send + Sync + 'static,
<L as Layer<Route<E>>>::Service: Service<Request<Body>> + Clone + Send + Sync + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Response: IntoResponse + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Error: Into<NewError> + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Future: Send + 'static,
E: 'static,
S: 'static,
NewError: 'static,
Apply a [tower::Layer] to all routes in the router.
This can be used to add additional processing to a request for a group of routes.
Note that the middleware is only applied to existing routes. So you have to
first add your routes (and / or fallback) and then call layer afterwards. Additional
routes added after layer is called will not have the middleware added.
Works similarly to Router::layer. See that method for
more details.
§Example
use axum::{routing::get, Router};
use tower::limit::ConcurrencyLimitLayer;
async fn handler() {}
let app = Router::new().route(
"/",
// All requests to `GET /` will be sent through `ConcurrencyLimitLayer`
get(handler).layer(ConcurrencyLimitLayer::new(64)),
);pub fn route_layer<L>(self, layer: L) -> MethodRouter<S, E>where
L: Layer<Route<E>> + Clone + Send + Sync + 'static,
<L as Layer<Route<E>>>::Service: Service<Request<Body>, Error = E> + Clone + Send + Sync + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Response: IntoResponse + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Future: Send + 'static,
E: 'static,
S: 'static,
pub fn route_layer<L>(self, layer: L) -> MethodRouter<S, E>where
L: Layer<Route<E>> + Clone + Send + Sync + 'static,
<L as Layer<Route<E>>>::Service: Service<Request<Body>, Error = E> + Clone + Send + Sync + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Response: IntoResponse + 'static,
<<L as Layer<Route<E>>>::Service as Service<Request<Body>>>::Future: Send + 'static,
E: 'static,
S: 'static,
Apply a [tower::Layer] to the router that will only run if the request matches
a route.
Note that the middleware is only applied to existing routes. So you have to
first add your routes (and / or fallback) and then call route_layer
afterwards. Additional routes added after route_layer is called will not have
the middleware added.
This works similarly to MethodRouter::layer except the middleware will only run if
the request matches a route. This is useful for middleware that return early
(such as authorization) which might otherwise convert a 405 Method Not Allowed into a
401 Unauthorized.
§Example
use axum::{
routing::get,
Router,
};
use tower_http::validate_request::ValidateRequestHeaderLayer;
let app = Router::new().route(
"/foo",
get(|| async {})
.route_layer(ValidateRequestHeaderLayer::bearer("password"))
);
// `GET /foo` with a valid token will receive `200 OK`
// `GET /foo` with a invalid token will receive `401 Unauthorized`
// `POST /FOO` with a invalid token will receive `405 Method Not Allowed`pub fn merge(self, other: MethodRouter<S, E>) -> MethodRouter<S, E>
pub fn merge(self, other: MethodRouter<S, E>) -> MethodRouter<S, E>
Merge two routers into one.
This is useful for breaking routers into smaller pieces and combining them into one.
use axum::{
routing::{get, post},
Router,
};
let get = get(|| async {});
let post = post(|| async {});
let merged = get.merge(post);
let app = Router::new().route("/", merged);
// Our app now accepts
// - GET /
// - POST /pub fn handle_error<F, T>(self, f: F) -> MethodRouter<S>where
F: Clone + Send + Sync + 'static,
HandleError<Route<E>, F, T>: Service<Request<Body>, Error = Infallible>,
<HandleError<Route<E>, F, T> as Service<Request<Body>>>::Future: Send,
<HandleError<Route<E>, F, T> as Service<Request<Body>>>::Response: IntoResponse + Send,
T: 'static,
E: 'static,
S: 'static,
pub fn handle_error<F, T>(self, f: F) -> MethodRouter<S>where
F: Clone + Send + Sync + 'static,
HandleError<Route<E>, F, T>: Service<Request<Body>, Error = Infallible>,
<HandleError<Route<E>, F, T> as Service<Request<Body>>>::Future: Send,
<HandleError<Route<E>, F, T> as Service<Request<Body>>>::Response: IntoResponse + Send,
T: 'static,
E: 'static,
S: 'static,
Apply a HandleErrorLayer.
This is a convenience method for doing self.layer(HandleErrorLayer::new(f)).
Trait Implementations§
§impl<S, E> Clone for MethodRouter<S, E>
impl<S, E> Clone for MethodRouter<S, E>
§fn clone(&self) -> MethodRouter<S, E>
fn clone(&self) -> MethodRouter<S, E>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<S, E> Debug for MethodRouter<S, E>
impl<S, E> Debug for MethodRouter<S, E>
§impl<S, E> Default for MethodRouter<S, E>where
S: Clone,
impl<S, E> Default for MethodRouter<S, E>where
S: Clone,
§fn default() -> MethodRouter<S, E>
fn default() -> MethodRouter<S, E>
§impl<S> Handler<(), S> for MethodRouter<S>where
S: Clone + 'static,
impl<S> Handler<(), S> for MethodRouter<S>where
S: Clone + 'static,
§type Future = InfallibleRouteFuture
type Future = InfallibleRouteFuture
§fn call(
self,
req: Request<Body>,
state: S,
) -> <MethodRouter<S> as Handler<(), S>>::Future
fn call( self, req: Request<Body>, state: S, ) -> <MethodRouter<S> as Handler<(), S>>::Future
§fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
fn layer<L>(self, layer: L) -> Layered<L, Self, T, S>where
L: Layer<HandlerService<Self, T, S>> + Clone,
<L as Layer<HandlerService<Self, T, S>>>::Service: Service<Request<Body>>,
tower::Layer] to the handler. Read more§fn with_state(self, state: S) -> HandlerService<Self, T, S>
fn with_state(self, state: S) -> HandlerService<Self, T, S>
Service] by providing the state§impl<L> Service<IncomingStream<'_, L>> for MethodRouterwhere
L: Listener,
impl<L> Service<IncomingStream<'_, L>> for MethodRouterwhere
L: Listener,
§type Response = MethodRouter
type Response = MethodRouter
§type Error = Infallible
type Error = Infallible
§type Future = Ready<Result<<MethodRouter as Service<IncomingStream<'_, L>>>::Response, <MethodRouter as Service<IncomingStream<'_, L>>>::Error>>
type Future = Ready<Result<<MethodRouter as Service<IncomingStream<'_, L>>>::Response, <MethodRouter as Service<IncomingStream<'_, L>>>::Error>>
§fn poll_ready(
&mut self,
_cx: &mut Context<'_>,
) -> Poll<Result<(), <MethodRouter as Service<IncomingStream<'_, L>>>::Error>>
fn poll_ready( &mut self, _cx: &mut Context<'_>, ) -> Poll<Result<(), <MethodRouter as Service<IncomingStream<'_, L>>>::Error>>
Poll::Ready(Ok(())) when the service is able to process requests. Read more§fn call(
&mut self,
_req: IncomingStream<'_, L>,
) -> <MethodRouter as Service<IncomingStream<'_, L>>>::Future
fn call( &mut self, _req: IncomingStream<'_, L>, ) -> <MethodRouter as Service<IncomingStream<'_, L>>>::Future
§impl<B, E> Service<Request<B>> for MethodRouter<(), E>
impl<B, E> Service<Request<B>> for MethodRouter<(), E>
§type Future = RouteFuture<E>
type Future = RouteFuture<E>
§fn poll_ready(
&mut self,
_cx: &mut Context<'_>,
) -> Poll<Result<(), <MethodRouter<(), E> as Service<Request<B>>>::Error>>
fn poll_ready( &mut self, _cx: &mut Context<'_>, ) -> Poll<Result<(), <MethodRouter<(), E> as Service<Request<B>>>::Error>>
Poll::Ready(Ok(())) when the service is able to process requests. Read moreAuto Trait Implementations§
impl<S, E> Freeze for MethodRouter<S, E>
impl<S = (), E = Infallible> !RefUnwindSafe for MethodRouter<S, E>
impl<S, E> Send for MethodRouter<S, E>
impl<S, E> Sync for MethodRouter<S, E>
impl<S, E> Unpin for MethodRouter<S, E>
impl<S = (), E = Infallible> !UnwindSafe for MethodRouter<S, E>
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<T> DowncastSend for T
impl<T> DowncastSend for T
§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.§impl<H, T> HandlerWithoutStateExt<T> for H
impl<H, T> HandlerWithoutStateExt<T> for H
§fn into_service(self) -> HandlerService<H, T, ()>
fn into_service(self) -> HandlerService<H, T, ()>
Service] and no state.§fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
fn into_make_service(self) -> IntoMakeService<HandlerService<H, T, ()>>
MakeService and no state. Read more§fn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<HandlerService<H, T, ()>, C>
tokio only.MakeService which stores information
about the incoming connection and has no state. Read more§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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 more§impl<T, I> IntoReactiveValue<T, __IntoReactiveValueMarkerBaseCase> for Iwhere
I: Into<T>,
impl<T, I> IntoReactiveValue<T, __IntoReactiveValueMarkerBaseCase> for Iwhere
I: Into<T>,
§fn into_reactive_value(self) -> T
fn into_reactive_value(self) -> T
self into a T.Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.§impl<M, S, Target, Request> MakeService<Target, Request> for Mwhere
M: Service<Target, Response = S>,
S: Service<Request>,
impl<M, S, Target, Request> MakeService<Target, Request> for Mwhere
M: Service<Target, Response = S>,
S: Service<Request>,
§fn poll_ready(
&mut self,
cx: &mut Context<'_>,
) -> Poll<Result<(), <M as MakeService<Target, Request>>::MakeError>>
fn poll_ready( &mut self, cx: &mut Context<'_>, ) -> Poll<Result<(), <M as MakeService<Target, Request>>::MakeError>>
Poll::Ready when the factory is able to create more services. Read more§fn make_service(
&mut self,
target: Target,
) -> <M as MakeService<Target, Request>>::Future
fn make_service( &mut self, target: Target, ) -> <M as MakeService<Target, Request>>::Future
§fn into_service(self) -> IntoService<Self, Request>where
Self: Sized,
fn into_service(self) -> IntoService<Self, Request>where
Self: Sized,
§fn as_service(&mut self) -> AsService<'_, Self, Request>where
Self: Sized,
fn as_service(&mut self) -> AsService<'_, Self, Request>where
Self: Sized,
§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> SerializableKey for T
impl<T> SerializableKey for T
§impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
impl<S, R> ServiceExt<R> for Swhere
S: Service<R>,
§fn into_make_service(self) -> IntoMakeService<S>
fn into_make_service(self) -> IntoMakeService<S>
MakeService, that is a [Service] whose
response is another service. Read more§fn into_make_service_with_connect_info<C>(
self,
) -> IntoMakeServiceWithConnectInfo<S, C>
fn into_make_service_with_connect_info<C>( self, ) -> IntoMakeServiceWithConnectInfo<S, C>
tokio only.MakeService, that will store C’s
associated ConnectInfo in a request extension such that ConnectInfo
can extract it. Read more§fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
fn handle_error<F, T>(self, f: F) -> HandleError<Self, F, T>
HandleError, that will handle errors
by converting them into responses. Read more§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> StorageAccess<T> for T
impl<T> StorageAccess<T> for T
§fn as_borrowed(&self) -> &T
fn as_borrowed(&self) -> &T
§fn into_taken(self) -> T
fn into_taken(self) -> T
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more