Skip to main content

Message

Struct Message 

Source
pub struct Message<EM: MessageBuffer> { /* private fields */ }
Expand description

A CoAP message that resides in contiguous readable memory.

This implementation does not attempt to do any early validation. On encoding errors discovered at runtime, it simply emits the critical-and-not-safe-to-forward CoAP option 65535 (OPTION_INVALID), which to the indication indicates that something went wrong

Message is covariant over its lifetime because it only reads from there, effectively fulfilling the expectations of LifetimesMatterLittle. That property is currently not exposed.

§Implementation details

When used with coap_message::helpers::RefWithStaticType, it always uses Message<EMS> where EMS is the type inside the LifetimesMatterLittle of the EM::static_variant() result. This is needed to run Self::downcast_from, and restores the lifetime based on the given impl Trait reference’s lifetime using its covariance property.

Implementations§

Source§

impl<'a> Message<SliceBuffer<'a>>

Source

pub fn new_from_slice(code: u8, options_and_payload: &'a [u8]) -> Self

Creates a message that is parsed from a slice.

This is a short-cut for creating a SliceBuffer and passing it to Self::new().

Source§

impl<EM: MessageBuffer> Message<EM>

Source

pub fn new(inner: EM) -> Self

Creates a new instance backed by an encoded message buffer.

Decoding assumes that the full tail of the buffer contains options and payload.

Source

pub fn new_until(inner: EM, length: usize) -> Self

Creates a new instance backed by an encoded message buffer.

Decoding assumes that the first length bytes contain options and payload. (The buffer having the option to be longer is mostly useful when it is also an MessageBufferMut, and might later get turned .into_mutable()).

Source

pub fn downcast_from<M: ReadableMessage>(generic: &M) -> Option<&Self>

Available on crate feature downcast only.
Source

pub fn into_mutable(self) -> Result<MessageMut<EM>, ParsingError>
where EM: MessageBufferMut,

Converts the message into a mutable writable message.

This can be useful to reuse a buffer that has been passed to the application, e.g. for in-place decryption or to shove around indefinite-length CBOR encoding inside payloads.

§Errors

… are only raised if the message contains parsing errors (for a mutable message is stricter in that regard).

Trait Implementations§

Source§

impl<EM: MessageBuffer> AsRef<EM> for Message<EM>

When the inner item stores more than just the code and encoded options, this can be used to gain read-only access to any additional data.

Note that no matter whether access is shared or exclusive, the MessageBuffer must uphold its promise to always return the same content.

Source§

fn as_ref(&self) -> &EM

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<EM: Clone + MessageBuffer> Clone for Message<EM>

Source§

fn clone(&self) -> Message<EM>

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<EM: Debug + MessageBuffer> Debug for Message<EM>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<EM> Format for Message<EM>
where EM: Format + MessageBuffer, Cell<Option<Processing>>: Format,

Source§

fn format(&self, f: Formatter<'_>)

Writes the defmt representation of self to fmt.
Source§

impl<EM: MessageBuffer> ReadableMessage for Message<EM>

Source§

type Code = u8

Source§

type MessageOption<'a> = MessageOption<'a> where Self: 'a

Type of an individual option, indicating its option number and value
Source§

type OptionsIter<'a> = OptionsIter<'a> where Self: 'a

Source§

fn code(&self) -> u8

Get the code (request method or response code) of the message Read more
Source§

fn payload(&self) -> &[u8]

Get the payload set in the message Read more
Source§

fn options(&self) -> OptionsIter<'_>

Produce all options in arbitrary order as an iterator Read more
Source§

fn with_static_type_annotation(&self) -> Option<RefWithStaticType<'_, Self>>

Type ID of Self or a ’static version of Self Read more
Source§

impl<EM: MessageBuffer> WithSortedOptions for Message<EM>

Auto Trait Implementations§

§

impl<EM> !Freeze for Message<EM>

§

impl<EM> !RefUnwindSafe for Message<EM>

§

impl<EM> !Sync for Message<EM>

§

impl<EM> Send for Message<EM>
where EM: Send,

§

impl<EM> Unpin for Message<EM>
where EM: Unpin,

§

impl<EM> UnsafeUnpin for Message<EM>
where EM: UnsafeUnpin,

§

impl<EM> UnwindSafe for Message<EM>
where EM: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<M> ShowMessageExt for M
where M: ReadableMessage,

Source§

fn show(&self) -> ShowMessage<'_, Self>

Wraps the message to have a core::fmt::Debug imlementation, and also provide [defmt_0_3::Format] if the defmt_0_3 feature is selected. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.