use logisheets_base::errors::BasicError;
use logisheets_parser::errors::ParseError;
use logisheets_workbook::SerdeErr;
use thiserror::Error;
use crate::{file_saver::SaveError, style_manager::errors::StyleError};
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error(transparent)]
Basic(#[from] BasicError),
#[error(transparent)]
Style(#[from] StyleError),
#[error(transparent)]
Serde(#[from] SerdeErr),
#[error(transparent)]
Save(#[from] SaveError),
#[error(transparent)]
Parse(#[from] ParseError),
#[error("unavailable sheet idx: {0}")]
UnavailableSheetIdx(usize),
}
#[cfg_attr(
feature = "gents",
gents_derives::gents_header(file_name = "error_message.ts")
)]
pub struct ErrorMessage {
pub msg: String,
pub ty: usize,
}
impl From<Error> for ErrorMessage {
fn from(value: Error) -> Self {
match value {
Error::Basic(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 0 }
}
Error::Style(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 1 }
}
Error::Serde(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 2 }
}
Error::Save(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 3 }
}
Error::Parse(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 4 }
}
Error::UnavailableSheetIdx(e) => {
let msg = e.to_string();
ErrorMessage { msg, ty: 5 }
}
}
}
}