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