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}