#[derive(Debug, thiserror::Error)]
pub enum EmbedderError {
#[error("embedder model error: {0}")]
ModelError(String),
#[error("embedder transport error: {0}")]
Transport(#[from] reqwest::Error),
#[error("embedder dimension mismatch: sent {sent} texts, got {got} vectors")]
DimensionMismatch { sent: usize, got: usize },
#[error("embedder remote error (HTTP {status}): {body}")]
RemoteError { status: u16, body: String },
#[error("embedder UDS error: {0}")]
Uds(String),
#[error("embedder stdio IPC error: {0}")]
Stdio(String),
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn error_display_model_error() {
let e = EmbedderError::ModelError("ort session failed".to_string());
assert!(e.to_string().contains("ort session failed"));
}
#[test]
fn error_display_dimension_mismatch() {
let e = EmbedderError::DimensionMismatch { sent: 5, got: 3 };
let s = e.to_string();
assert!(s.contains("5") && s.contains("3"));
}
#[test]
fn error_display_remote_error() {
let e = EmbedderError::RemoteError {
status: 500,
body: "internal server error".to_string(),
};
assert!(e.to_string().contains("500"));
}
#[test]
fn error_display_uds() {
let e = EmbedderError::Uds(
"connect to /tmp/trusty-embedderd.sock failed: no such file".to_string(),
);
let s = e.to_string();
assert!(s.contains("UDS"), "must mention UDS");
assert!(s.contains("no such file"), "must contain inner message");
}
#[test]
fn error_display_stdio() {
let e = EmbedderError::Stdio("write to child stdin: broken pipe".to_string());
let s = e.to_string();
assert!(s.contains("stdio"), "must mention stdio");
assert!(s.contains("broken pipe"), "must contain inner message");
}
}