1use std::fmt;
2
3#[derive(Debug)]
4pub enum Error {
5 InvalidParam {
6 param: String,
7 value: String,
8 constraint: String,
9 },
10 SortMismatch {
11 expected: &'static str,
12 actual: &'static str,
13 },
14 MissingParam {
15 op: String,
16 param: String,
17 },
18 UnknownOp {
19 name: String,
20 },
21 BuildFailure {
22 message: String,
23 },
24 ExecuteFailure {
25 source: anyhow::Error,
26 },
27}
28
29impl fmt::Display for Error {
30 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
31 match self {
32 Error::InvalidParam {
33 param,
34 value,
35 constraint,
36 } => {
37 write!(
38 f,
39 "invalid value {value:?} for parameter {param:?}: {constraint}"
40 )
41 }
42 Error::SortMismatch { expected, actual } => {
43 write!(f, "sort mismatch: expected {expected}, got {actual}")
44 }
45 Error::MissingParam { op, param } => {
46 write!(f, "missing required parameter {param:?} for op {op:?}")
47 }
48 Error::UnknownOp { name } => {
49 write!(f, "unknown op: {name:?}")
50 }
51 Error::BuildFailure { message } => {
52 write!(f, "plan build failed: {message}")
53 }
54 Error::ExecuteFailure { source } => {
55 write!(f, "execution failed: {source}")
56 }
57 }
58 }
59}
60
61impl std::error::Error for Error {}
62
63pub type Result<T> = std::result::Result<T, Error>;