Skip to main content

RawMessage

Struct RawMessage 

Source
pub struct RawMessage<'a> { /* private fields */ }
Expand description

Zero-copy view into a FIX message buffer.

This struct holds references to the original message buffer, avoiding allocation during parsing. Fields are stored as offset ranges into the buffer.

§Range convention

Every stored range is relative to buffer, not to whatever larger buffer the message may have been decoded from. A decoder that reads several messages out of one input must rebase its offsets by the start of the current message before constructing a RawMessage; RawMessage::new rejects any range that does not lie within buffer.

Implementations§

Source§

impl<'a> RawMessage<'a>

Source

pub fn new( buffer: &'a [u8], begin_string: Range<usize>, body: Range<usize>, msg_type: MsgType, fields: SmallVec<[FieldRef<'a>; 32]>, ) -> Result<Self, DecodeError>

Creates a new RawMessage from parsed components.

§Arguments
  • buffer - The complete message buffer
  • begin_string - Range of the BeginString value, relative to buffer
  • body - Range of the message body, relative to buffer
  • msg_type - The parsed message type
  • fields - Parsed field references
§Errors

Returns DecodeError::RangeOutOfBounds if begin_string or body is inverted or does not lie within buffer. Every offset here derives from attacker-supplied bytes, so the bounds are checked once at construction rather than at every accessor.

Source

pub const fn buffer(&self) -> &'a [u8]

Returns the complete message buffer.

Source

pub fn begin_string(&self) -> Result<&'a str, DecodeError>

Returns the BeginString value (e.g., “FIX.4.4”).

§Errors

Returns DecodeError::InvalidUtf8 if the BeginString bytes are not valid UTF-8, or DecodeError::RangeOutOfBounds if the stored range escapes the buffer. The value is never silently defaulted to "".

Source

pub fn body(&self) -> Result<&'a [u8], DecodeError>

Returns the message body bytes (after BodyLength, before the checksum).

§Errors

Returns DecodeError::RangeOutOfBounds if the stored range escapes the buffer.

Source

pub fn msg_type(&self) -> &MsgType

Returns the message type.

Source

pub fn fields(&self) -> impl Iterator<Item = &FieldRef<'a>>

Returns an iterator over all fields.

Source

pub fn field_count(&self) -> usize

Returns the number of fields in the message.

Source

pub fn get_field(&self, tag: u32) -> Option<&FieldRef<'a>>

Gets a field by tag number.

§Arguments
  • tag - The field tag number
§Returns

The first field with the given tag, or None if not found.

Source

pub fn get_field_str(&self, tag: u32) -> Option<&'a str>

Gets a field value as a string.

§Arguments
  • tag - The field tag number
§Returns

The field value as a string, or None if not found or invalid UTF-8.

Source

pub fn get_field_as<T: FromStr>(&self, tag: u32) -> Result<T, DecodeError>

Gets a field value parsed as the specified type.

§Arguments
  • tag - The field tag number
§Errors

Returns DecodeError if the field is not found or cannot be parsed.

Source

pub fn body_range(&self) -> &Range<usize>

Returns the message body range.

Source

pub fn len(&self) -> usize

Returns the message length in bytes.

Source

pub fn is_empty(&self) -> bool

Returns true if the message is empty.

Source

pub fn to_owned(&self) -> OwnedMessage

Converts this borrowed message to an owned message.

Trait Implementations§

Source§

impl<'a> Clone for RawMessage<'a>

Source§

fn clone(&self) -> RawMessage<'a>

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<'a> Debug for RawMessage<'a>

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<'a> Freeze for RawMessage<'a>

§

impl<'a> RefUnwindSafe for RawMessage<'a>

§

impl<'a> Send for RawMessage<'a>

§

impl<'a> Sync for RawMessage<'a>

§

impl<'a> Unpin for RawMessage<'a>

§

impl<'a> UnsafeUnpin for RawMessage<'a>

§

impl<'a> UnwindSafe for RawMessage<'a>

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> 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.