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§
type RequestData
sourcetype ExtractRequestError: Debug + RenderableOnMinimal
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]).
sourcetype BuildResponseError<M: MinimalWritableMessage>: Debug + RenderableOnMinimal
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§
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>>
Object Safety§
Implementations on Foreign Types§
source§impl<H> Handler for Option<H>where
H: Handler,
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.