1use core::fmt;
6
7use antecedent_core::VariableId;
8
9#[derive(Clone, Debug, Eq, PartialEq)]
11#[non_exhaustive]
12pub enum DataError {
13 LengthMismatch {
15 expected: usize,
17 actual: usize,
19 context: &'static str,
21 },
22 UnknownVariable {
24 id: VariableId,
26 },
27 TypeMismatch {
29 id: VariableId,
31 expected: &'static str,
33 },
34 InvalidValidity {
36 message: &'static str,
38 },
39 EmptySelection {
41 context: &'static str,
43 },
44 IncompleteSeries {
46 id: Option<VariableId>,
48 message: &'static str,
50 },
51 InvalidArgument {
53 message: String,
55 },
56 Schema(String),
58}
59
60impl fmt::Display for DataError {
61 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
62 match self {
63 Self::LengthMismatch { expected, actual, context } => {
64 write!(f, "{context}: expected length {expected}, got {actual}")
65 }
66 Self::UnknownVariable { id } => write!(f, "unknown variable {id}"),
67 Self::TypeMismatch { id, expected } => {
68 write!(f, "variable {id} is not of type {expected}")
69 }
70 Self::InvalidValidity { message } => write!(f, "invalid validity: {message}"),
71 Self::EmptySelection { context } => write!(f, "empty selection: {context}"),
72 Self::IncompleteSeries { id, message } => match id {
73 Some(id) => write!(f, "incomplete series (variable {id}): {message}"),
74 None => write!(f, "incomplete series: {message}"),
75 },
76 Self::InvalidArgument { message } => write!(f, "invalid argument: {message}"),
77 Self::Schema(msg) => write!(f, "schema error: {msg}"),
78 }
79 }
80}
81
82impl std::error::Error for DataError {}