use nodedb_types::{QualifiedCollection, Surrogate};
use super::sum_target::ResolvedSumTarget;
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub enum DocumentResolvedMutation {
Put {
collection: QualifiedCollection,
document_id: String,
surrogate: Surrogate,
pk_bytes: Vec<u8>,
value: Vec<u8>,
precondition: Option<Vec<u8>>,
resolved_sum_targets: Vec<ResolvedSumTarget>,
},
Delete {
collection: QualifiedCollection,
document_id: String,
surrogate: Surrogate,
pk_bytes: Vec<u8>,
precondition: Option<Vec<u8>>,
resolved_sum_targets: Vec<ResolvedSumTarget>,
},
}
impl DocumentResolvedMutation {
pub fn collection(&self) -> &QualifiedCollection {
match self {
DocumentResolvedMutation::Put { collection, .. }
| DocumentResolvedMutation::Delete { collection, .. } => collection,
}
}
pub fn document_id(&self) -> &str {
match self {
DocumentResolvedMutation::Put { document_id, .. }
| DocumentResolvedMutation::Delete { document_id, .. } => document_id.as_str(),
}
}
pub fn surrogate(&self) -> Surrogate {
match self {
DocumentResolvedMutation::Put { surrogate, .. }
| DocumentResolvedMutation::Delete { surrogate, .. } => *surrogate,
}
}
pub fn precondition(&self) -> Option<&[u8]> {
match self {
DocumentResolvedMutation::Put { precondition, .. }
| DocumentResolvedMutation::Delete { precondition, .. } => precondition.as_deref(),
}
}
}
#[derive(
Debug,
Clone,
PartialEq,
serde::Serialize,
serde::Deserialize,
zerompk::ToMessagePack,
zerompk::FromMessagePack,
)]
pub struct DocumentResolveOutcome {
pub mutations: Vec<DocumentResolvedMutation>,
pub response_payload: Vec<u8>,
}