1use core::fmt::{self, Display};
2
3use alloc::boxed::Box;
4
5pub type Result<T> = core::result::Result<T, Error>;
6
7#[derive(Clone, Debug, PartialEq, Eq)]
9pub enum Error {
10 CorruptedHeader(Box<str>),
12
13 DecodingError,
15
16 EncodingError,
18
19 RequiredRequisiteNotPresented,
21
22 UnknownPair(Box<str>, Box<str>),
24
25 UnknownEncodingCode(u8),
27
28 UnknownTechCode(Box<str>),
30
31 UnsupportedVersion { passed: [u8; 4], current: [u8; 4] },
33
34 WrongFormatId([u8; 2]),
36
37 WrongPair(Box<str>, Box<str>),
39
40 WrongRequiredRequisiteOrder {
42 passed: Box<str>,
43 expected: Box<str>,
44 },
45}
46
47impl Display for Error {
48 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
49 match self {
50 Error::CorruptedHeader(err) => write!(f, "Ошибка при парсинге заголовка: \"{}\"", err),
51 Error::DecodingError => write!(f, "Ошибка при декодировании тела"),
52 Error::EncodingError => write!(f, "Ошибка при кодировании тела"),
53 Error::RequiredRequisiteNotPresented => {
54 write!(f, "Обязательные реквизиты не предоставлены")
55 }
56 Error::UnknownPair(key, val) => write!(f, "Неизвестный реквизит: {}={}", key, val),
57 Error::UnknownEncodingCode(code) => write!(f, "Неизвестный код кодировки {}", code),
58 Error::UnknownTechCode(code) => {
59 write!(f, "Неизвестный технический код платежа {}", code)
60 }
61 Error::UnsupportedVersion { passed, current } => write!(
62 f,
63 "Версия {} не поддерживается, текущая версия {}",
64 core::str::from_utf8(passed).unwrap(),
65 core::str::from_utf8(current).unwrap(),
66 ),
67 Error::WrongFormatId(format_id) => write!(
68 f,
69 "Неправильный Format ID {}{}",
70 format_id[0] as char, format_id[1] as char
71 ),
72 Error::WrongPair(key, val) => write!(f, "Неправильное значение пары {}={}", key, val),
73 Error::WrongRequiredRequisiteOrder { passed, expected } => write!(
74 f,
75 "Неправильный порядок обязательных реквизитов. Ожидалось {} встречено {}",
76 expected, passed
77 ),
78 }
79 }
80}
81
82impl core::error::Error for Error {}