Trait coap_handler::Handler

source ·
pub trait Handler {
    type RequestData;
    type ExtractRequestError: Debug + RenderableOnMinimal;
    type BuildResponseError<M: MinimalWritableMessage>: Debug + RenderableOnMinimal;

    // Required methods
    fn extract_request_data<M: ReadableMessage>(
        &mut self,
        request: &M
    ) -> Result<Self::RequestData, Self::ExtractRequestError>;
    fn estimate_length(&mut self, request: &Self::RequestData) -> usize;
    fn build_response<M: MutableWritableMessage>(
        &mut self,
        response: &mut M,
        request: Self::RequestData
    ) -> Result<(), Self::BuildResponseError<M>>;
}
Expand description

A CoAP request handler. This gets called by a CoAP server implementation that the handler is assigned to; the server has the handler digest the request’s data into a RequestData structure, possibly calls estimate_length before allocating a response message, and then asks the handler to populate the allocated response message with data persisted in the RequestData structure.

Required Associated Types§

source

type RequestData

source

type ExtractRequestError: Debug + RenderableOnMinimal

Error type for extract_request_data.

Typical types to use here are core::convert::Infallible (which, due to the possibility of unknown critical CoAP options, is only practical when their presence is carried in the extracted data) or types provided by libraries (eg. [coap-handler-implementations::option_processing::BadOption]).

source

type BuildResponseError<M: MinimalWritableMessage>: Debug + RenderableOnMinimal

Error type for writing response data

This is generic over writable messages because the most typical errors to show up here are generated when writing to the messages. A suitable type here is M::UnionError.

Required Methods§

source

fn extract_request_data<M: ReadableMessage>( &mut self, request: &M ) -> Result<Self::RequestData, Self::ExtractRequestError>

source

fn estimate_length(&mut self, request: &Self::RequestData) -> usize

source

fn build_response<M: MutableWritableMessage>( &mut self, response: &mut M, request: Self::RequestData ) -> Result<(), Self::BuildResponseError<M>>

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<H> Handler for Option<H>
where H: Handler,

An easy way to have resources that may or may not be there in a tree, considering that Handler is not object safe and thus, if let Some(x) { all = all.at(...) } won’t work.

This returns 4.04 Not Found if the inner handler is absent, and otherwise forwards request and response building.

Implementors§