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}
31
32#[derive(Debug)]
33pub enum GarbledReason {
34    Malformed,
35    InvalidBeginString,
36    InvalidBodyLength,
37    InvalidMsgType,
38    InvalidChecksum,
39}
40
41impl From<MessageIntegrityError> for ParsedMessage {
42    fn from(header_error: MessageIntegrityError) -> Self {
43        match header_error {
44            MessageIntegrityError::InvalidBeginString => {
45                ParsedMessage::Garbled(GarbledReason::InvalidBeginString)
46            }
47            MessageIntegrityError::InvalidBodyLength => {
48                ParsedMessage::Garbled(GarbledReason::InvalidBodyLength)
49            }
50            MessageIntegrityError::InvalidMsgType => {
51                ParsedMessage::Garbled(GarbledReason::InvalidMsgType)
52            }
53            MessageIntegrityError::InvalidCheckSum => {
54                ParsedMessage::Garbled(GarbledReason::InvalidChecksum)
55            }
56        }
57    }
58}