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