Skip to main content

OutboundMessage

Struct OutboundMessage 

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

An outbound message: a MsgType plus ordered body fields.

The engine stamps the standard header (BeginString, BodyLength, MsgType, SenderCompID, TargetCompID, MsgSeqNum, SendingTime) and the trailer when the message is sent, so the builder only carries body fields. Fields are encoded in insertion order.

§Mutating one in a callback

Application::to_admin and Application::to_app receive this type by &mut before the header is stamped and before a sequence number is spent, so a field added there is encoded into the frame that goes out. The canonical use is stamping Username (553) and Password (554) onto the outbound Logon.

The header fields are not visible here — in particular MsgSeqNum (34) is not yet decided when the callback runs, which is what lets a rejected message cost nothing.

§Constraints

OutboundMessage::new accepts any MsgType so the engine can build its own administrative messages with it; the restriction to application MsgTypes is enforced by Connection::send, which is the public path. See RESERVED_TAGS for the tags a body may not carry.

§Credentials never print

This is the object a to_admin callback stamps a Password (554) onto, so its Debug impl is hand-written to redact the values of Password (554), NewPassword (925) and RawData (96) — a derived Debug would let a single tracing::debug!(?message) leak a secret. Every other field is shown as normal.

Implementations§

Source§

impl OutboundMessage

Source

pub fn new(msg_type: MsgType) -> Self

Creates a new outbound message of the given type.

§Arguments
  • msg_type - The message type (tag 35)
Source

pub fn msg_type(&self) -> &MsgType

Returns the message type.

Source

pub fn push_raw(&mut self, tag: u32, value: impl Into<Vec<u8>>) -> &mut Self

Appends a field with raw bytes.

§Arguments
  • tag - The field tag number
  • value - The field value bytes
Source

pub fn push_data( &mut self, length_tag: u32, data_tag: u32, value: impl Into<Vec<u8>>, ) -> &mut Self

Appends a counted LENGTH/DATA field pair.

A FIX DATA field (RawData/96, Signature/89, the Encoded* family) legally contains SOH and =; it is decodable only because its paired LENGTH field declares its byte count. The engine derives that count from value when the message is encoded, so the two cannot disagree and the payload’s SOH bytes are never read as field terminators. Use this instead of OutboundMessage::push_raw for any DATA field — push_raw refuses a LENGTH or DATA tag precisely because writing one half alone would corrupt the frame.

§Arguments
  • length_tag - The LENGTH field tag (e.g., 95 RawDataLength)
  • data_tag - The paired DATA field tag (e.g., 96 RawData)
  • value - The raw payload
Source

pub fn push_str(&mut self, tag: u32, value: &str) -> &mut Self

Appends a field with a string value.

§Arguments
  • tag - The field tag number
  • value - The field value
Source

pub fn push_int(&mut self, tag: u32, value: i64) -> &mut Self

Appends a field with an integer value.

§Arguments
  • tag - The field tag number
  • value - The field value
Source

pub fn push_uint(&mut self, tag: u32, value: u64) -> &mut Self

Appends a field with an unsigned integer value.

§Arguments
  • tag - The field tag number
  • value - The field value
Source

pub fn push_char(&mut self, tag: u32, value: char) -> &mut Self

Appends a field with a single character value.

§Arguments
  • tag - The field tag number
  • value - The field value
Source

pub fn push_bool(&mut self, tag: u32, value: bool) -> &mut Self

Appends a field with a boolean value (Y/N).

§Arguments
  • tag - The field tag number
  • value - The field value
Source

pub fn get(&self, tag: u32) -> Option<&[u8]>

Returns the value of the first field with tag, if present.

§Arguments
  • tag - The field tag number
Source

pub fn remove(&mut self, tag: u32) -> usize

Removes every field carrying tag, returning how many were removed.

A OutboundField::Data pair is removed when either its LENGTH or its DATA tag matches, so the counted halves never survive apart.

§Arguments
  • tag - The field tag number
Source

pub fn fields(&self) -> &[OutboundField]

Returns the body fields in insertion order.

Trait Implementations§

Source§

impl Clone for OutboundMessage

Source§

fn clone(&self) -> OutboundMessage

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 Debug for OutboundMessage

Source§

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

Redacts the value of every credential-bearing field so the type cannot leak a Password (554), NewPassword (925) or RawData (96) through a log line.

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

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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 = !

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

fn try_from(value: U) -> Result<T, !>

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

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more