use std::{error::Error as StdError, sync::Arc};
use thiserror::Error;
use crate::worker::WorkerError;
pub type BoxDynError = Box<dyn StdError + 'static + Send + Sync>;
#[derive(Error, Debug, Clone)]
#[non_exhaustive]
pub enum Error {
#[error("FailedError: {0}")]
Failed(#[source] Arc<BoxDynError>),
#[error("IoError: {0}")]
Io(#[from] Arc<std::io::Error>),
#[error("MissingContextError: {0}")]
MissingContext(String),
#[error("AbortError: {0}")]
Abort(#[source] Arc<BoxDynError>),
#[error("WorkerError: {0}")]
WorkerError(WorkerError),
#[doc(hidden)]
#[error("Encountered an error during service execution")]
ServiceError(#[source] Arc<BoxDynError>),
#[doc(hidden)]
#[error("Encountered an error during streaming")]
SourceError(#[source] Arc<BoxDynError>),
}