use thiserror::Error;
use entelix_core::error::Error;
pub type OpenAiEmbedderResult<T> = std::result::Result<T, OpenAiEmbedderError>;
#[derive(Debug, Error)]
#[non_exhaustive]
pub enum OpenAiEmbedderError {
#[error("network failure: {message}")]
Network {
message: String,
#[source]
source: Option<Box<dyn std::error::Error + Send + Sync + 'static>>,
},
#[error("HTTP {status}: {body}")]
HttpStatus {
status: u16,
body: String,
},
#[error("malformed response: {0}")]
Malformed(String),
#[error("configuration error: {0}")]
Config(String),
#[error(transparent)]
Credential(Error),
#[error(transparent)]
Serde(#[from] serde_json::Error),
}
impl OpenAiEmbedderError {
pub fn network<E>(source: E) -> Self
where
E: std::error::Error + Send + Sync + 'static,
{
Self::Network {
message: source.to_string(),
source: Some(Box::new(source)),
}
}
}
impl From<OpenAiEmbedderError> for Error {
fn from(err: OpenAiEmbedderError) -> Self {
match err {
OpenAiEmbedderError::Config(msg) => Self::config(msg),
OpenAiEmbedderError::Credential(e) => e,
other => Self::provider_network_from(other),
}
}
}