MessageHeader

Struct MessageHeader 

Source
pub struct MessageHeader { /* private fields */ }
Expand description

Indicates a chunk datum format and which stream is it into.

This header has 4 types.

TotalTimestampMessage LengthMessage TypeMessage ID
113314
7331
33
0

The unit of every length item is bytes.

  • 11 bytes type is required when a new message ID is necessary, that is, communicating with a partner on a new message stream.
  • 7 bytes type is required when a message which is different either type or length, sends/receives on same message stream.
  • 3 bytes type is required when a message which is same both type and length, sends/receives on same message stream.
  • 0 bytes type is required when concatenates a message which is same both type and length, but exceeding the chunk size on same message stream.

Note that 0 bytes type is required to consider of the message length because can be contained into its chunk datum.

tuples are convertible into message headers.

TuplesMessage Header Format
(Duration, u32, u8, u32)New
`(Duration, u32, u8)SameSource
DurationTimerChange
()Continue

§Examples

use std::time::Duration;
use sheave_core::messages::headers::MessageHeader;

let new: MessageHeader = (Duration::default(), u32::default(), u8::default().into(), u32::default()).into();
assert!(new.get_message_id().is_some());

let same_source: MessageHeader = (Duration::default(), u32::default(), u8::default().into()).into();
assert!(same_source.get_message_length().is_some());
assert!(same_source.get_message_type().is_some());

let timer_change: MessageHeader = Duration::default().into();
assert!(timer_change.get_timestamp().is_some());

let cont: MessageHeader = ().into();
assert!(cont.get_timestamp().is_none())

Implementations§

Source§

impl MessageHeader

Source

pub fn get_timestamp(&self) -> Option<Duration>

Gets a timestamp.

Only 0 bytes type returns None.

§Examples
use std::time::Duration;
use sheave_core::messages::headers::MessageHeader;

// In case of 11 bytes type.
let new: MessageHeader = (Duration::default(), u32::default(), u8::default().into(), u32::default()).into();
assert!(new.get_timestamp().is_some());

// In case of 7 bytes type.
let same_source: MessageHeader = (Duration::default(), u32::default(), u8::default().into()).into();
assert!(same_source.get_timestamp().is_some());

// In case of 3 bytes type.
let timer_change: MessageHeader = Duration::default().into();
assert!(timer_change.get_timestamp().is_some());
 
// In case of 0 bytes type.
let cont: MessageHeader = ().into();
assert!(cont.get_timestamp().is_none())
Source

pub fn get_message_length(&self) -> Option<u32>

Gets a message length.

0 bytes type and 3 bytes type return None.

§Examples
use std::time::Duration;
use sheave_core::messages::headers::MessageHeader;

// In case of 11 bytes type.
let new: MessageHeader = (Duration::default(), u32::default(), u8::default().into(), u32::default()).into();
assert!(new.get_message_length().is_some());

// In case of 7 bytes type.
let same_source: MessageHeader = (Duration::default(), u32::default(), u8::default().into()).into();
assert!(same_source.get_message_length().is_some());

// In case of 3 bytes type.
let timer_change: MessageHeader = Duration::default().into();
assert!(timer_change.get_message_length().is_none());

// In case of 0 bytes type.
let cont: MessageHeader = ().into();
assert!(cont.get_message_length().is_none())
Source

pub fn get_message_type(&self) -> Option<MessageType>

Gets a message type.

0 bytes type and 3 bytes type return None.

§Examples
use std::time::Duration;
use sheave_core::messages::headers::MessageHeader;

// In case of 11 bytes type.
let new: MessageHeader = (Duration::default(), u32::default(), u8::default().into(), u32::default()).into();
assert!(new.get_message_type().is_some());

// In case of 7 bytes type.
let same_source: MessageHeader = (Duration::default(), u32::default(), u8::default().into()).into();
assert!(same_source.get_message_type().is_some());

// In case of 3 bytes type.
let timer_change: MessageHeader = Duration::default().into();
assert!(timer_change.get_message_type().is_none());

// In case of 0 bytes type.
let cont: MessageHeader = ().into();
assert!(cont.get_message_type().is_none())
Source

pub fn get_message_id(&self) -> Option<u32>

Gets a message ID.

All but 11 bytes type returns None.

§Examples
use std::time::Duration;
use sheave_core::messages::headers::MessageHeader;

// In case of 11 bytes type.
let new: MessageHeader = (Duration::default(), u32::default(), u8::default().into(), u32::default()).into();
assert!(new.get_message_id().is_some());

// In case of 7 bytes type.
let same_source: MessageHeader = (Duration::default(), u32::default(), u8::default().into()).into();
assert!(same_source.get_message_id().is_none());

// In case of 3 bytes type.
let timer_change: MessageHeader = Duration::default().into();
assert!(timer_change.get_message_id().is_none());

// In case of 0 bytes type.
let cont: MessageHeader = ().into();
assert!(cont.get_message_id().is_none())

Trait Implementations§

Source§

impl Clone for MessageHeader

Source§

fn clone(&self) -> MessageHeader

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for MessageHeader

Source§

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

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

impl Default for MessageHeader

Source§

fn default() -> MessageHeader

Returns the “default value” for a type. Read more
Source§

impl From<()> for MessageHeader

Source§

fn from(_fields: ()) -> Self

Converts to this type from the input type.
Source§

impl From<(Duration, u32, MessageType)> for MessageHeader

Source§

fn from( (timestamp, message_length, message_type): (Duration, u32, MessageType), ) -> Self

Converts to this type from the input type.
Source§

impl From<(Duration, u32, MessageType, u32)> for MessageHeader

Source§

fn from( (timestamp, message_length, message_type, message_id): (Duration, u32, MessageType, u32), ) -> Self

Converts to this type from the input type.
Source§

impl From<Duration> for MessageHeader

Source§

fn from(timestamp: Duration) -> Self

Converts to this type from the input type.
Source§

impl From<MessageHeader> for (Option<Duration>, Option<u32>, Option<MessageType>, Option<u32>)

Source§

fn from(message_header: MessageHeader) -> Self

Converts to this type from the input type.
Source§

impl Copy for MessageHeader

Auto Trait Implementations§

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<T> Same for T

Source§

type Output = T

Should always be Self
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V