Skip to main content

hotfix_message/
error.rs

1use hotfix_dictionary::TagU32;
2use std::collections::HashSet;
3use std::io;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum EncodingError {
8    #[error("IO error")]
9    IOError(#[from] io::Error),
10}
11
12pub type EncodingResult<T> = Result<T, EncodingError>;
13
14#[derive(Error, Debug)]
15pub enum ParserError {
16    #[error("IO error")]
17    IOError(#[from] io::Error),
18    #[error("field (tag = {0}) is missing from FIX dictionary")]
19    InvalidField(u32),
20    #[error("group (tag = {0}) is missing from FIX dictionary")]
21    InvalidGroup(u32),
22    #[error(
23        "field (tag = {tag}) is not in a valid position within the group (group tag = {group_tag})"
24    )]
25    InvalidGroupFieldOrder { tag: u32, group_tag: u32 },
26    #[error("component (name = {0}) is missing from FIX dictionary")]
27    InvalidComponent(String),
28    #[error("MsgType {0} is not a valid message type")]
29    InvalidMsgType(String),
30    #[error("malformed message: {0}")]
31    Malformed(String),
32}
33
34pub type ParserResult<T> = Result<T, ParserError>;
35
36#[derive(Error, Debug)]
37#[allow(clippy::enum_variant_names)]
38pub(crate) enum MessageIntegrityError {
39    #[error("Invalid BeginString")]
40    InvalidBeginString,
41    #[error("Invalid BodyLength")]
42    InvalidBodyLength,
43    #[error("Invalid MsgType")]
44    InvalidMsgType,
45    #[error("Invalid CheckSum")]
46    InvalidCheckSum,
47}
48
49#[derive(Error, Debug)]
50pub enum SetGroupsError {
51    #[error("Supplied empty vector of groups")]
52    EmptyGroups,
53    #[error("Supplied groups contain multiple start tags")]
54    MultipleStartTagsAndDelimiters(HashSet<(TagU32, TagU32)>),
55}