1use core::fmt;
6
7use antecedent_core::VariableId;
8
9#[derive(Clone, Debug, Eq, PartialEq)]
11pub enum DataError {
12 LengthMismatch {
14 expected: usize,
16 actual: usize,
18 context: &'static str,
20 },
21 UnknownVariable {
23 id: VariableId,
25 },
26 TypeMismatch {
28 id: VariableId,
30 expected: &'static str,
32 },
33 InvalidValidity {
35 message: &'static str,
37 },
38 EmptySelection {
40 context: &'static str,
42 },
43 IncompleteSeries {
45 id: Option<VariableId>,
47 message: &'static str,
49 },
50 InvalidArgument {
52 message: String,
54 },
55 Schema(String),
57}
58
59impl fmt::Display for DataError {
60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61 match self {
62 Self::LengthMismatch { expected, actual, context } => {
63 write!(f, "{context}: expected length {expected}, got {actual}")
64 }
65 Self::UnknownVariable { id } => write!(f, "unknown variable {id}"),
66 Self::TypeMismatch { id, expected } => {
67 write!(f, "variable {id} is not of type {expected}")
68 }
69 Self::InvalidValidity { message } => write!(f, "invalid validity: {message}"),
70 Self::EmptySelection { context } => write!(f, "empty selection: {context}"),
71 Self::IncompleteSeries { id, message } => match id {
72 Some(id) => write!(f, "incomplete series (variable {id}): {message}"),
73 None => write!(f, "incomplete series: {message}"),
74 },
75 Self::InvalidArgument { message } => write!(f, "invalid argument: {message}"),
76 Self::Schema(msg) => write!(f, "schema error: {msg}"),
77 }
78 }
79}
80
81impl std::error::Error for DataError {}