#![allow(clippy::struct_excessive_bools)]
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct StorageCapabilities {
pub put: bool,
pub get: bool,
pub delete: bool,
pub list_prefix: bool,
pub atomic_overwrite: bool,
pub range_read: bool,
}
impl Default for StorageCapabilities {
fn default() -> Self {
Self {
put: true,
get: true,
delete: true,
list_prefix: true,
atomic_overwrite: true,
range_read: false,
}
}
}
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MetadataCapabilities {
pub migrate: bool,
pub audit_since: bool,
pub links: bool,
}
impl Default for MetadataCapabilities {
fn default() -> Self {
Self {
migrate: true,
audit_since: true,
links: true,
}
}
}
#[non_exhaustive]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct EmbedderCapabilities {
pub batched: bool,
pub asymmetric_query_passage: bool,
pub max_input_tokens: Option<usize>,
}
impl Default for EmbedderCapabilities {
fn default() -> Self {
Self {
batched: true,
asymmetric_query_passage: false,
max_input_tokens: None,
}
}
}
pub(crate) const REQUIRED_STORAGE: StorageCapabilities = StorageCapabilities {
put: true,
get: true,
delete: true,
list_prefix: true,
atomic_overwrite: true,
range_read: false,
};
pub(crate) const REQUIRED_METADATA: MetadataCapabilities = MetadataCapabilities {
migrate: true,
audit_since: true,
links: true,
};
pub(crate) const REQUIRED_EMBEDDER: EmbedderCapabilities = EmbedderCapabilities {
batched: true,
asymmetric_query_passage: false,
max_input_tokens: None,
};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Plugin {
Storage,
Metadata,
Embedder,
}
impl Plugin {
#[must_use]
pub fn as_str(&self) -> &'static str {
match self {
Plugin::Storage => "Storage",
Plugin::Metadata => "MetadataStore",
Plugin::Embedder => "Embedder",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn defaults_satisfy_engine_required_set() {
let s = StorageCapabilities::default();
assert!(s.put && s.get && s.delete && s.list_prefix && s.atomic_overwrite);
let m = MetadataCapabilities::default();
assert!(m.migrate && m.audit_since && m.links);
let e = EmbedderCapabilities::default();
assert!(e.batched);
}
}