feoxdb/utils/
json_patch.rs

1use crate::error::{FeoxError, Result};
2use json_patch::Patch;
3use serde_json::Value;
4
5pub fn apply_json_patch(document: &[u8], patch: &[u8]) -> Result<Vec<u8>> {
6    let mut doc: Value = serde_json::from_slice(document)
7        .map_err(|e| FeoxError::JsonPatchError(format!("Invalid JSON document: {}", e)))?;
8
9    let patch: Patch = serde_json::from_slice(patch)
10        .map_err(|e| FeoxError::JsonPatchError(format!("Invalid patch: {}", e)))?;
11
12    json_patch::patch(&mut doc, &patch)
13        .map_err(|e| FeoxError::JsonPatchError(format!("Patch failed: {}", e)))?;
14
15    serde_json::to_vec(&doc)
16        .map_err(|e| FeoxError::JsonPatchError(format!("Serialization failed: {}", e)))
17}