use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use serde_json::Value;
#[derive(Debug, Clone, Deserialize, JsonSchema)]
#[schemars(transform = crate::schema::strip_int_formats)]
pub struct Link {
pub target: u64,
pub relation: String,
}
#[derive(Debug, Clone, Serialize, JsonSchema)]
#[schemars(transform = crate::schema::strip_int_formats)]
pub struct Recollection {
pub id: u64,
pub score: f32,
pub content: String,
}
#[derive(Debug, Clone, Copy, Deserialize, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum ColumnOp {
Eq,
Ne,
Lt,
Le,
Gt,
Ge,
}
impl ColumnOp {
#[must_use]
pub(crate) fn as_sql(self) -> &'static str {
match self {
Self::Eq => "=",
Self::Ne => "!=",
Self::Lt => "<",
Self::Le => "<=",
Self::Gt => ">",
Self::Ge => ">=",
}
}
}
#[derive(Debug, Clone, Deserialize, JsonSchema)]
pub struct ColumnFilter {
pub field: String,
pub op: ColumnOp,
pub value: Value,
}
#[derive(Debug, Clone, Serialize, JsonSchema)]
#[schemars(transform = crate::schema::strip_int_formats)]
pub struct MemoryNode {
pub id: u64,
pub content: String,
pub hop: usize,
}
#[derive(Debug, Clone, Serialize, JsonSchema)]
#[schemars(transform = crate::schema::strip_int_formats)]
pub struct MemoryEdge {
pub from: u64,
pub to: u64,
pub relation: String,
}
#[derive(Debug, Clone, Default, Serialize, JsonSchema)]
pub struct Explanation {
pub nodes: Vec<MemoryNode>,
pub edges: Vec<MemoryEdge>,
}