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
impl OutboundMessage
Sourcepub fn push_data(
&mut self,
length_tag: u32,
data_tag: u32,
value: impl Into<Vec<u8>>,
) -> &mut Self
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- TheLENGTHfield tag (e.g., 95RawDataLength)data_tag- The pairedDATAfield tag (e.g., 96RawData)value- The raw payload
Sourcepub fn push_int(&mut self, tag: u32, value: i64) -> &mut Self
pub fn push_int(&mut self, tag: u32, value: i64) -> &mut Self
Appends a field with an integer value.
§Arguments
tag- The field tag numbervalue- The field value
Sourcepub fn push_uint(&mut self, tag: u32, value: u64) -> &mut Self
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 numbervalue- The field value
Sourcepub fn push_char(&mut self, tag: u32, value: char) -> &mut Self
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 numbervalue- The field value
Sourcepub fn push_bool(&mut self, tag: u32, value: bool) -> &mut Self
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 numbervalue- The field value
Sourcepub fn remove(&mut self, tag: u32) -> usize
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
Sourcepub fn fields(&self) -> &[OutboundField]
pub fn fields(&self) -> &[OutboundField]
Returns the body fields in insertion order.
Trait Implementations§
Source§impl Clone for OutboundMessage
impl Clone for OutboundMessage
Source§fn clone(&self) -> OutboundMessage
fn clone(&self) -> OutboundMessage
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more