Skip to main content

hotfix_message/
parsed_message.rs

1use 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}