use nodedb_types::{QualifiedCollection, Surrogate};
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum KvResolvedMutation {
Put {
collection: QualifiedCollection,
key: Vec<u8>,
value: Vec<u8>,
ttl_ms: u64,
expire_at_ms: u64,
surrogate: Surrogate,
precondition: Option<Vec<u8>>,
},
Rewrite {
collection: QualifiedCollection,
key: Vec<u8>,
value: Vec<u8>,
ttl_ms: u64,
expire_at_ms: u64,
precondition: Vec<u8>,
},
Delete {
collection: QualifiedCollection,
key: Vec<u8>,
precondition: Option<Vec<u8>>,
},
Expire {
collection: QualifiedCollection,
key: Vec<u8>,
ttl_ms: u64,
resolved_now_ms: u64,
precondition: Option<Vec<u8>>,
},
Persist {
collection: QualifiedCollection,
key: Vec<u8>,
precondition: Option<Vec<u8>>,
},
}
impl KvResolvedMutation {
pub fn collection(&self) -> &QualifiedCollection {
match self {
KvResolvedMutation::Put { collection, .. }
| KvResolvedMutation::Rewrite { collection, .. }
| KvResolvedMutation::Delete { collection, .. }
| KvResolvedMutation::Expire { collection, .. }
| KvResolvedMutation::Persist { collection, .. } => collection,
}
}
pub fn key(&self) -> &[u8] {
match self {
KvResolvedMutation::Put { key, .. }
| KvResolvedMutation::Rewrite { key, .. }
| KvResolvedMutation::Delete { key, .. }
| KvResolvedMutation::Expire { key, .. }
| KvResolvedMutation::Persist { key, .. } => key.as_slice(),
}
}
pub fn precondition(&self) -> Option<&[u8]> {
match self {
KvResolvedMutation::Put { precondition, .. }
| KvResolvedMutation::Delete { precondition, .. }
| KvResolvedMutation::Expire { precondition, .. }
| KvResolvedMutation::Persist { precondition, .. } => precondition.as_deref(),
KvResolvedMutation::Rewrite { precondition, .. } => Some(precondition.as_slice()),
}
}
}
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct KvResolveOutcome {
pub mutations: Vec<KvResolvedMutation>,
pub response_payload: Vec<u8>,
}