use crate::uid::Uid;
pub use ragit_api::Error as ApiError;
pub use ragit_pdl::JsonType;
use ragit_fs::FileError;
use std::string::FromUtf8Error;
pub type Path = String;
#[derive(Debug)]
pub enum Error {
JsonTypeError {
expected: JsonType,
got: JsonType,
},
IndexAlreadyExists(Path),
InvalidConfigKey(String),
InvalidImageType(String),
InvalidUid(String),
PromptMissing(String),
IndexNotFound,
NoSuchChunk(Uid),
NoSuchQuery(Uid),
NoSuchFile { path: Option<Path>, uid: Option<Uid> },
NoFileToRemove,
NoRemoteToPullFrom,
NoSuchMeta(String),
NoSummary,
NoQueryToLog,
CorruptedFile { path: Path, message: Option<String> },
CliError {
message: String,
span: Option<ragit_cli::RenderedSpan>,
},
UidQueryError(String),
BrokenHash(String),
BrokenPrompt(String),
BrokenArchive(String),
RequestFailure {
context: Option<String>, code: Option<u16>,
url: String,
},
InvalidVersionString(String),
CannotMigrate {
from: String,
to: String,
},
CannotCreateArchive(String),
CannotExtractArchive(String),
CannotClone(String),
CannotPush(String),
CannotAddFile {
file: String, message: String,
},
DirtyKnowledgeBase,
DeprecatedConfig {
key: String,
message: String,
},
InvalidMergePrefix(String),
MergeConflict(Uid),
MPSCError(String),
CannotDecodeUid,
ModelNotSelected,
InvalidModelName {
name: String,
candidates: Vec<String>,
},
FeatureNotEnabled { action: String, feature: String },
ApiKeyNotFound { env_var: Option<String> },
Internal(String),
FileReaderError(String),
BrokenIndex(String),
BrokenII(String),
ReqwestError(reqwest::Error),
JsonSerdeError(serde_json::Error),
ImageError(image::ImageError),
#[cfg(feature = "csv")]
CsvError(csv::Error),
UrlParseError(url::ParseError),
JoinError(tokio::task::JoinError),
#[cfg(feature = "pdf")]
MuPdfError(mupdf::Error),
#[cfg(feature = "svg")]
UsvgError(resvg::usvg::Error),
#[cfg(feature = "svg")]
PngEncodingError(png::EncodingError),
TeraError(tera::Error),
FileError(FileError),
StdIoError(std::io::Error),
FromUtf8Error,
ApiError(ApiError),
PdlError(ragit_pdl::Error),
}
impl From<reqwest::Error> for Error {
fn from(e: reqwest::Error) -> Error {
Error::ReqwestError(e)
}
}
impl From<serde_json::Error> for Error {
fn from(e: serde_json::Error) -> Error {
Error::JsonSerdeError(e)
}
}
impl From<image::ImageError> for Error {
fn from(e: image::ImageError) -> Error {
Error::ImageError(e)
}
}
#[cfg(feature = "csv")]
impl From<csv::Error> for Error {
fn from(e: csv::Error) -> Error {
Error::CsvError(e)
}
}
impl From<FileError> for Error {
fn from(e: FileError) -> Error {
Error::FileError(e)
}
}
impl From<std::io::Error> for Error {
fn from(e: std::io::Error) -> Error {
Error::StdIoError(e)
}
}
impl From<FromUtf8Error> for Error {
fn from(_: FromUtf8Error) -> Error {
Error::FromUtf8Error
}
}
impl From<url::ParseError> for Error {
fn from(e: url::ParseError) -> Error {
Error::UrlParseError(e)
}
}
impl From<tokio::task::JoinError> for Error {
fn from(e: tokio::task::JoinError) -> Error {
Error::JoinError(e)
}
}
#[cfg(feature = "pdf")]
impl From<mupdf::Error> for Error {
fn from(e: mupdf::Error) -> Self {
Error::MuPdfError(e)
}
}
#[cfg(feature = "svg")]
impl From<resvg::usvg::Error> for Error {
fn from(e: resvg::usvg::Error) -> Self {
Error::UsvgError(e)
}
}
#[cfg(feature = "svg")]
impl From<png::EncodingError> for Error {
fn from(e: png::EncodingError) -> Self {
Error::PngEncodingError(e)
}
}
impl From<tera::Error> for Error {
fn from(e: tera::Error) -> Error {
Error::TeraError(e)
}
}
impl From<ApiError> for Error {
fn from(e: ApiError) -> Self {
match e {
ApiError::JsonTypeError { expected, got } => Error::JsonTypeError { expected, got },
ApiError::StdIoError(e) => Error::StdIoError(e),
ApiError::ReqwestError(e) => Error::ReqwestError(e),
ApiError::JsonSerdeError(e) => Error::JsonSerdeError(e),
ApiError::TeraError(e) => Error::TeraError(e),
ApiError::FileError(e) => Error::FileError(e),
ApiError::ApiKeyNotFound { env_var } => Error::ApiKeyNotFound { env_var },
ApiError::InvalidModelName { name, candidates } => Error::InvalidModelName { name, candidates },
e => Error::ApiError(e),
}
}
}
impl From<ragit_pdl::Error> for Error {
fn from(e: ragit_pdl::Error) -> Self {
match e {
ragit_pdl::Error::InvalidImageType(e) => Error::InvalidImageType(e),
e => Error::PdlError(e),
}
}
}
impl From<ragit_cli::Error> for Error {
fn from(e: ragit_cli::Error) -> Self {
Error::CliError {
message: e.kind.render(),
span: e.span,
}
}
}
impl From<ragit_pdl::SchemaParseError> for Error {
fn from(e: ragit_pdl::SchemaParseError) -> Self {
ragit_pdl::Error::from(e).into()
}
}