use nodedb_types::Surrogate;
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum VectorResolvedMutation {
Delete {
surrogate: Surrogate,
old_payload: Vec<u8>,
},
Update {
surrogate: Surrogate,
new_vector: Option<Vec<f32>>,
merged_payload: Vec<u8>,
old_payload: Vec<u8>,
},
Upsert {
surrogate: Surrogate,
pk_bytes: Vec<u8>,
vector: Vec<f32>,
payload: Vec<u8>,
old_payload: Option<Vec<u8>>,
},
}
impl VectorResolvedMutation {
pub fn surrogate(&self) -> Surrogate {
match self {
VectorResolvedMutation::Delete { surrogate, .. }
| VectorResolvedMutation::Update { surrogate, .. }
| VectorResolvedMutation::Upsert { surrogate, .. } => *surrogate,
}
}
pub fn stored_vector(&self) -> Option<&[f32]> {
match self {
VectorResolvedMutation::Delete { .. } => None,
VectorResolvedMutation::Update { new_vector, .. } => new_vector.as_deref(),
VectorResolvedMutation::Upsert { vector, .. } => Some(vector.as_slice()),
}
}
}
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct VectorResolveOutcome {
pub mutations: Vec<VectorResolvedMutation>,
pub response_payload: Vec<u8>,
}