Trait tower_web::routing::Resource[][src]

pub trait Resource: Clone {
    type Destination: Clone + Send + Sync + 'static;
    type RequestBody: BufStream;
    type Buf: Buf;
    type Body: BufStream<Item = Self::Buf, Error = Error>;
    type Future: ResourceFuture<Body = Self::Body>;
    fn dispatch(
        &mut self,
        destination: Self::Destination,
        route_match: &RouteMatch,
        body: Self::RequestBody
    ) -> Self::Future; }

A Resource processes HTTP requests received by the service.

A single service is composed of one or more resources. A resource instance is created with a route set representing the set of routes that it is able to handle. The service merges the route sets together and uses it to match inbound requests.

When matching a route, the route set returns a Self::Destination value. This value is then provided to Resource::dispatch and this is how the resource instance knows which method to dispatch the request to.

Users are not expected to implement Resource themselves. Instead, the impl_web! macro will generate a Resource implementation. The implementation is then passed to ServiceBuilder to define the web service.

Associated Types

Token mapping a route to a resource method.

The HTTP request body type.

Buffer type yielded by the response body.

The HTTP response body type.

This value will yield one or more Self::Buf values.

Response future

Required Methods

Process the HTTP request and return the response asynchronously.

The HTTP request has already been matched against the route set before calling this function. The destination and route_match arguments provide the necessary context for the resource to process the matched HTTP request.

Implementations on Foreign Types

impl<R0> Resource for (R0,) where
    R0: Resource
[src]

impl<R0, R1> Resource for (R0, R1) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2> Resource for (R0, R1, R2) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3> Resource for (R0, R1, R2, R3) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4> Resource for (R0, R1, R2, R3, R4) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5> Resource for (R0, R1, R2, R3, R4, R5) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6> Resource for (R0, R1, R2, R3, R4, R5, R6) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6, R7> Resource for (R0, R1, R2, R3, R4, R5, R6, R7) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>,
    R7: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6, R7, R8> Resource for (R0, R1, R2, R3, R4, R5, R6, R7, R8) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>,
    R7: Resource<RequestBody = R0::RequestBody>,
    R8: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6, R7, R8, R9> Resource for (R0, R1, R2, R3, R4, R5, R6, R7, R8, R9) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>,
    R7: Resource<RequestBody = R0::RequestBody>,
    R8: Resource<RequestBody = R0::RequestBody>,
    R9: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10> Resource for (R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>,
    R7: Resource<RequestBody = R0::RequestBody>,
    R8: Resource<RequestBody = R0::RequestBody>,
    R9: Resource<RequestBody = R0::RequestBody>,
    R10: Resource<RequestBody = R0::RequestBody>, 
[src]

impl<R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11> Resource for (R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11) where
    R0: Resource,
    R1: Resource<RequestBody = R0::RequestBody>,
    R2: Resource<RequestBody = R0::RequestBody>,
    R3: Resource<RequestBody = R0::RequestBody>,
    R4: Resource<RequestBody = R0::RequestBody>,
    R5: Resource<RequestBody = R0::RequestBody>,
    R6: Resource<RequestBody = R0::RequestBody>,
    R7: Resource<RequestBody = R0::RequestBody>,
    R8: Resource<RequestBody = R0::RequestBody>,
    R9: Resource<RequestBody = R0::RequestBody>,
    R10: Resource<RequestBody = R0::RequestBody>,
    R11: Resource<RequestBody = R0::RequestBody>, 
[src]

Implementors