index/fulltext_index/
error.rsuse std::any::Any;
use std::io::Error as IoError;
use common_error::ext::{BoxedError, ErrorExt};
use common_error::status_code::StatusCode;
use common_macro::stack_trace_debug;
use snafu::{Location, Snafu};
use tantivy::DocAddress;
#[derive(Snafu)]
#[snafu(visibility(pub))]
#[stack_trace_debug]
pub enum Error {
#[snafu(display("IO error"))]
Io {
#[snafu(source)]
error: IoError,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Tantivy error"))]
Tantivy {
#[snafu(source)]
error: tantivy::TantivyError,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Tantivy parser error"))]
TantivyParser {
#[snafu(source)]
error: tantivy::query::QueryParserError,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Tantivy doc not found"))]
TantivyDocNotFound {
#[snafu(implicit)]
location: Location,
doc_addr: DocAddress,
},
#[snafu(display("Operate on a finished creator"))]
Finished {
#[snafu(implicit)]
location: Location,
},
#[snafu(display("External error"))]
External {
source: BoxedError,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Join error"))]
Join {
#[snafu(source)]
error: tokio::task::JoinError,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Aborted creator"))]
Aborted {
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Failed to add blob to puffin file"))]
PuffinAddBlob {
source: puffin::error::Error,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Failed to finish bloom filter"))]
BloomFilterFinish {
source: crate::bloom_filter::error::Error,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("BiErrors, first: {first}, second: {second}"))]
BiErrors {
first: Box<Error>,
second: Box<Error>,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Failed to serialize to json"))]
SerializeToJson {
#[snafu(source)]
error: serde_json::error::Error,
#[snafu(implicit)]
location: Location,
},
#[snafu(display("Failed to deserialize from json"))]
DeserializeFromJson {
#[snafu(source)]
error: serde_json::error::Error,
#[snafu(implicit)]
location: Location,
},
}
impl ErrorExt for Error {
fn status_code(&self) -> StatusCode {
use Error::*;
match self {
Tantivy { .. } | TantivyDocNotFound { .. } => StatusCode::Internal,
TantivyParser { .. } => StatusCode::InvalidSyntax,
BiErrors { .. } => StatusCode::Internal,
Io { .. } | Finished { .. } | Join { .. } | Aborted { .. } => StatusCode::Unexpected,
BloomFilterFinish { source, .. } => source.status_code(),
PuffinAddBlob { source, .. } => source.status_code(),
External { source, .. } => source.status_code(),
SerializeToJson { .. } | DeserializeFromJson { .. } => StatusCode::Internal,
}
}
fn as_any(&self) -> &dyn Any {
self
}
}
pub type Result<T> = std::result::Result<T, Error>;