use strum_macros::{Display, EnumString};
use crate::util::position::Position;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Display, EnumString)]
pub enum ErrorCode {
#[strum(serialize = "SMIK-1")]
Smik1,
#[strum(serialize = "SMIK-2")]
Smik2,
#[strum(serialize = "SMIV-1")]
Smiv1,
#[strum(serialize = "SMIV-2")]
Smiv2,
#[strum(serialize = "SMIV-3")]
Smiv3,
#[strum(serialize = "CIMK-1")]
Cimk1,
#[strum(serialize = "CIMK-2")]
Cimk2,
#[strum(serialize = "CIMK-3")]
Cimk3,
#[strum(serialize = "CIMV-1")]
Cimv1,
#[strum(serialize = "CIMV-2")]
Cimv2,
#[strum(serialize = "CIMV-3")]
Cimv3,
#[strum(serialize = "CIMV-4")]
Cimv4,
#[strum(serialize = "CHB-1")]
Chb1,
#[strum(serialize = "CHB-2")]
Chb2,
#[strum(serialize = "CHO-1")]
Cho1,
#[strum(serialize = "CHO-2")]
Cho2,
#[strum(serialize = "CHO-3")]
Cho3,
#[strum(serialize = "DEN-1")]
Den1,
#[strum(serialize = "DEN-2")]
Den2,
#[strum(serialize = "EXT-1")]
Ext1,
#[strum(serialize = "EXT-2")]
Ext2,
#[strum(serialize = "EXT-3")]
Ext3,
#[strum(serialize = "EXT-4")]
Ext4,
#[strum(serialize = "TKN-1")]
Tkn1,
#[strum(serialize = "BS-1")]
Bs1,
#[strum(serialize = "BL-1")]
Bl1,
#[strum(serialize = "OTHER-1")]
Other1,
}
#[derive(Debug, PartialEq)]
pub struct ErrorInfo {
pub code: ErrorCode,
pub additional_info: Option<String>,
}
#[derive(Debug, PartialEq)]
pub struct ErrorInfoWithPosition {
pub error: ErrorInfo,
pub position: Position,
}
impl std::fmt::Display for ErrorInfo {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
let additional_info = match &self.additional_info {
Some(info) => format!(": {}", info),
None => "".to_string(),
};
write!(f, "{}{}", self.code, additional_info)
}
}