use std::fmt;
use std::path::PathBuf;
#[cfg(feature = "serde_derive")]
use serde::{Deserialize, Serialize};
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[cfg_attr(feature = "serde_derive", derive(Serialize, Deserialize))]
pub enum WorkbookSide {
Old,
New,
}
impl fmt::Display for WorkbookSide {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
WorkbookSide::Old => write!(f, "old"),
WorkbookSide::New => write!(f, "new"),
}
}
}
#[derive(Debug)]
pub enum SheetsDiffError {
OpenWorkbook {
side: WorkbookSide,
path: PathBuf,
source: calamine::XlsxError,
},
OpenReader {
side: WorkbookSide,
source: calamine::XlsxError,
},
ReadSheetValues {
side: WorkbookSide,
sheet: String,
source: calamine::XlsxError,
},
ReadSheetFormulas {
side: WorkbookSide,
sheet: String,
source: calamine::XlsxError,
},
}
impl fmt::Display for SheetsDiffError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SheetsDiffError::OpenWorkbook { side, path, source } => write!(
f,
"cannot open {} workbook '{}': {}",
side,
path.display(),
source,
),
SheetsDiffError::OpenReader { side, source } => {
write!(f, "cannot parse {} workbook from reader: {}", side, source)
}
SheetsDiffError::ReadSheetValues { side, sheet, source } => write!(
f,
"cannot read values from {} workbook sheet '{}': {}",
side, sheet, source,
),
SheetsDiffError::ReadSheetFormulas { side, sheet, source } => write!(
f,
"cannot read formulas from {} workbook sheet '{}': {}",
side, sheet, source,
),
}
}
}
impl std::error::Error for SheetsDiffError {
fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
match self {
SheetsDiffError::OpenWorkbook { source, .. } => Some(source),
SheetsDiffError::OpenReader { source, .. } => Some(source),
SheetsDiffError::ReadSheetValues { source, .. } => Some(source),
SheetsDiffError::ReadSheetFormulas { source, .. } => Some(source),
}
}
}