gost_56042/
error.rs

1use core::fmt::{self, Display};
2
3use alloc::boxed::Box;
4
5pub type Result<T> = core::result::Result<T, Error>;
6
7/// Ошибки при создании платежа и парсинге.
8#[derive(Clone, Debug, PartialEq, Eq)]
9pub enum Error {
10    /// Ошибка при парсинге заголовка.
11    CorruptedHeader(Box<str>),
12
13    /// Ошибка при декодировании тела.
14    DecodingError,
15
16    /// Ошибка при кодировании тела.
17    EncodingError,
18
19    /// Обязательные реквизиты не предоставлены.
20    RequiredRequisiteNotPresented,
21
22    /// Неизвестная пара реквизитов.
23    UnknownPair(Box<str>, Box<str>),
24
25    /// Неизвестный код для кодировки.
26    UnknownEncodingCode(u8),
27
28    /// Неизвестный технический код платежа.
29    UnknownTechCode(Box<str>),
30
31    /// Неподдерживаемая версия.
32    UnsupportedVersion { passed: [u8; 4], current: [u8; 4] },
33
34    /// Неправильный Format ID.
35    WrongFormatId([u8; 2]),
36
37    /// Неправильное значение для пары-значения.
38    WrongPair(Box<str>, Box<str>),
39
40    /// Неправильный порядок обязательных реквизитов.
41    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 {}