hotfix_message/
parsed_message.rs1use crate::error::MessageIntegrityError;
2use crate::message::Message;
3
4pub enum ParsedMessage {
5 Valid(Message),
6 Invalid {
7 message: Message,
8 reason: InvalidReason,
9 },
10 Garbled(GarbledReason),
11 UnexpectedError(String),
12}
13
14impl ParsedMessage {
15 pub fn into_message(self) -> Option<Message> {
16 match self {
17 ParsedMessage::Valid(message) => Some(message),
18 ParsedMessage::Invalid { message, .. } => Some(message),
19 _ => None,
20 }
21 }
22}
23
24pub enum InvalidReason {
25 InvalidField(u32),
26 InvalidGroup(u32),
27 InvalidOrderInGroup { tag: u32, group_tag: u32 },
28 InvalidComponent(String),
29 InvalidMsgType(String),
30 RequiredFieldMissing { tag: u32, group_tag: Option<u32> },
31}
32
33#[derive(Debug)]
34pub enum GarbledReason {
35 Malformed,
36 InvalidBeginString,
37 InvalidBodyLength,
38 InvalidMsgType,
39 InvalidChecksum,
40}
41
42impl From<MessageIntegrityError> for ParsedMessage {
43 fn from(header_error: MessageIntegrityError) -> Self {
44 match header_error {
45 MessageIntegrityError::InvalidBeginString => {
46 ParsedMessage::Garbled(GarbledReason::InvalidBeginString)
47 }
48 MessageIntegrityError::InvalidBodyLength => {
49 ParsedMessage::Garbled(GarbledReason::InvalidBodyLength)
50 }
51 MessageIntegrityError::InvalidMsgType => {
52 ParsedMessage::Garbled(GarbledReason::InvalidMsgType)
53 }
54 MessageIntegrityError::InvalidCheckSum => {
55 ParsedMessage::Garbled(GarbledReason::InvalidChecksum)
56 }
57 }
58 }
59}