#![deny(clippy::wildcard_enum_match_arm)]
use super::super::types::ReplicatedEntry;
use super::{
crdt, entry_array, entry_columnar_family, entry_document, entry_graph, entry_kv, vector,
};
use crate::bridge::envelope::PhysicalPlan;
use crate::types::{DatabaseId, TenantId, VShardId};
pub(super) fn encode_provenance(
provenance: &Option<nodedb_types::sync::wire::SyncProvenance>,
) -> Option<Vec<u8>> {
provenance
.as_ref()
.map(|p| zerompk::to_msgpack_vec(p).expect("SyncProvenance serialization is infallible"))
}
pub fn to_replicated_entry(
tenant_id: TenantId,
database_id: DatabaseId,
vshard_id: VShardId,
plan: &PhysicalPlan,
) -> Option<ReplicatedEntry> {
let write = match plan {
PhysicalPlan::Document(op) => entry_document::document_write(op),
PhysicalPlan::Kv(op) => entry_kv::kv_write(op),
PhysicalPlan::Vector(op) => vector::encode(op),
PhysicalPlan::Crdt(op) => crdt::encode(op),
PhysicalPlan::Graph(op) => entry_graph::graph_write(op),
PhysicalPlan::Columnar(op) => entry_columnar_family::columnar_write(op),
PhysicalPlan::Timeseries(op) => entry_columnar_family::timeseries_write(op),
PhysicalPlan::Text(op) => entry_columnar_family::text_write(op),
PhysicalPlan::Spatial(op) => entry_columnar_family::spatial_write(op),
PhysicalPlan::Array(op) => entry_array::array_write(op),
PhysicalPlan::ClusterArray(_) => None,
PhysicalPlan::Query(_) => None,
PhysicalPlan::Meta(_) => None,
};
write.map(|write| {
ReplicatedEntry::new(
tenant_id.as_u64(),
database_id.as_u64(),
vshard_id.as_u32(),
write,
)
})
}