include!(concat!(env!("OUT_DIR"), "/fix44_asn1.rs"));
#[cfg(feature = "fix40")]
pub mod fix40 {
include!(concat!(env!("OUT_DIR"), "/fix40_asn1.rs"));
}
#[cfg(feature = "fix50")]
pub mod fix50 {
include!(concat!(env!("OUT_DIR"), "/fix50_asn1.rs"));
}
#[cfg(test)]
mod tests {
use super::*;
use crate::types::{Field, FixMessage};
#[test]
fn test_message_type_conversion() {
assert_eq!(
FixMessageType::from_str("D")
.expect("Failed to parse valid message type 'D'")
.as_str(),
"D"
);
let msg_type =
FixMessageType::from_str("8").expect("Failed to parse valid message type '8'");
assert_eq!(msg_type.as_str(), "8");
assert!(FixMessageType::from_str("INVALID").is_none());
}
#[test]
fn test_field_tag_conversion() {
if let Some(tag) = FixFieldTag::from_u32(35) {
assert_eq!(tag.as_u32(), 35);
assert_eq!(u32::from(tag), 35u32);
}
assert!(FixFieldTag::from_u32(99999).is_none());
}
#[test]
fn test_asn1_message_conversion() {
let fix_msg = FixMessage {
msg_type: "D".to_string(),
sender_comp_id: "SENDER".to_string(),
target_comp_id: "TARGET".to_string(),
msg_seq_num: 123,
fields: vec![Field {
tag: 55,
value: crate::types::FixFieldValue::String("EUR/USD".to_string()),
}],
};
let asn1_msg = Asn1FixMessage::from_fix_message(&fix_msg)
.expect("Failed to convert valid FIX message to ASN.1");
assert_eq!(asn1_msg.msg_type.as_str(), "D");
assert_eq!(asn1_msg.sender_comp_id, "SENDER");
assert_eq!(asn1_msg.msg_seq_num, 123);
assert_eq!(asn1_msg.fields.len(), 1);
let converted_back = asn1_msg.to_fix_message();
assert_eq!(converted_back.msg_type, fix_msg.msg_type);
assert_eq!(converted_back.sender_comp_id, fix_msg.sender_comp_id);
assert_eq!(converted_back.msg_seq_num, fix_msg.msg_seq_num);
assert_eq!(converted_back.fields.len(), fix_msg.fields.len());
}
}