use crate::domain::error::DomainResult;
use std::fmt::Debug;
pub trait Embedder: Send + Sync + Debug {
fn embed_document(&self, text: &str) -> DomainResult<Option<Vec<f32>>>;
fn embed_query(&self, text: &str) -> DomainResult<Option<Vec<f32>>>;
fn dimensions(&self) -> usize;
}
#[cfg(test)]
mod tests {
use super::*;
use crate::infrastructure::embeddings::DummyEmbedding;
#[test]
fn given_dummy_embedder_when_embed_document_then_returns_none() {
let embedder = DummyEmbedding;
let result = embedder.embed_document("test text").unwrap();
assert!(result.is_none());
}
#[test]
fn given_dummy_embedder_when_embed_query_then_returns_none() {
let embedder = DummyEmbedding;
let result = embedder.embed_query("test query").unwrap();
assert!(result.is_none());
}
#[test]
fn given_dummy_embedder_when_dimensions_then_returns_zero() {
let embedder = DummyEmbedding;
assert_eq!(embedder.dimensions(), 0);
}
}