use std::any::Any;
use common_error::ext::ErrorExt;
use common_error::status_code::StatusCode;
use common_macro::stack_trace_debug;
use snafu::Snafu;
use crate::TimeFilter;
#[derive(Snafu)]
#[snafu(visibility(pub))]
#[stack_trace_debug]
pub enum Error {
#[snafu(display("Invalid time filter: {filter:?}"))]
InvalidTimeFilter { filter: TimeFilter },
#[snafu(display("Invalid date format: {input}"))]
InvalidDateFormat { input: String },
#[snafu(display("Invalid span format: {input}"))]
InvalidSpanFormat { input: String },
#[snafu(display("End time {end} is before start time {start}"))]
EndBeforeStart { start: String, end: String },
}
impl ErrorExt for Error {
fn as_any(&self) -> &dyn Any {
self
}
fn status_code(&self) -> StatusCode {
match self {
Error::InvalidTimeFilter { .. }
| Error::InvalidDateFormat { .. }
| Error::InvalidSpanFormat { .. }
| Error::EndBeforeStart { .. } => StatusCode::InvalidArguments,
}
}
}
pub type Result<T> = std::result::Result<T, Error>;