#![deny(clippy::wildcard_enum_match_arm)]
use super::super::types::ReplicatedWrite;
use super::entry::encode_provenance;
use nodedb_physical::physical_plan::ArrayOp;
use nodedb_types::sync::wire::SyncProvenance;
pub(super) fn array_write(op: &ArrayOp) -> Option<ReplicatedWrite> {
match op {
ArrayOp::Put {
array_id,
cells_msgpack,
provenance,
..
} => Some(cell_put(&array_id.name, cells_msgpack, provenance)),
ArrayOp::Delete {
array_id,
coords_msgpack,
provenance,
..
} => Some(cell_delete(&array_id.name, coords_msgpack, provenance)),
ArrayOp::Flush { .. } => None,
ArrayOp::OpenArray { .. }
| ArrayOp::Compact { .. }
| ArrayOp::DropArray { .. }
| ArrayOp::Slice { .. }
| ArrayOp::Project { .. }
| ArrayOp::Aggregate { .. }
| ArrayOp::Elementwise { .. }
| ArrayOp::SurrogateBitmapScan { .. } => None,
}
}
fn cell_put(
array: &str,
cells_msgpack: &[u8],
provenance: &Option<SyncProvenance>,
) -> ReplicatedWrite {
ReplicatedWrite::ArrayCellPut {
array: array.to_owned(),
cells_msgpack: cells_msgpack.to_vec(),
provenance: encode_provenance(provenance),
}
}
fn cell_delete(
array: &str,
coords_msgpack: &[u8],
provenance: &Option<SyncProvenance>,
) -> ReplicatedWrite {
ReplicatedWrite::ArrayCellDelete {
array: array.to_owned(),
coords_msgpack: coords_msgpack.to_vec(),
provenance: encode_provenance(provenance),
}
}