pub struct MessageHeader { /* private fields */ }Expand description
Indicates a chunk datum format and which stream is it into.
This header has 4 types.
| Total | Timestamp | Message Length | Message Type | Message ID |
|---|---|---|---|---|
| 11 | 3 | 3 | 1 | 4 |
| 7 | 3 | 3 | 1 | |
| 3 | 3 | |||
| 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.
| Tuples | Message Header Format |
|---|---|
(Duration, u32, u8, u32) | New |
| `(Duration, u32, u8) | SameSource |
Duration | TimerChange |
() | 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
impl MessageHeader
Sourcepub fn get_timestamp(&self) -> Option<Duration>
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())Sourcepub fn get_message_length(&self) -> Option<u32>
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())Sourcepub fn get_message_type(&self) -> Option<MessageType>
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())Sourcepub fn get_message_id(&self) -> Option<u32>
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
impl Clone for MessageHeader
Source§fn clone(&self) -> MessageHeader
fn clone(&self) -> MessageHeader
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MessageHeader
impl Debug for MessageHeader
Source§impl Default for MessageHeader
impl Default for MessageHeader
Source§fn default() -> MessageHeader
fn default() -> MessageHeader
Returns the “default value” for a type. Read more
Source§impl From<()> for MessageHeader
impl From<()> for MessageHeader
Source§impl From<(Duration, u32, MessageType)> for MessageHeader
impl From<(Duration, u32, MessageType)> for MessageHeader
Source§impl From<(Duration, u32, MessageType, u32)> for MessageHeader
impl From<(Duration, u32, MessageType, u32)> for MessageHeader
Source§impl From<Duration> for MessageHeader
impl From<Duration> for MessageHeader
Source§impl From<MessageHeader> for (Option<Duration>, Option<u32>, Option<MessageType>, Option<u32>)
impl From<MessageHeader> for (Option<Duration>, Option<u32>, Option<MessageType>, Option<u32>)
Source§fn from(message_header: MessageHeader) -> Self
fn from(message_header: MessageHeader) -> Self
Converts to this type from the input type.
impl Copy for MessageHeader
Auto Trait Implementations§
impl Freeze for MessageHeader
impl RefUnwindSafe for MessageHeader
impl Send for MessageHeader
impl Sync for MessageHeader
impl Unpin for MessageHeader
impl UnwindSafe for MessageHeader
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more