serde_cursor 0.4.0

fetch the desired parts of a serde-compatible data format efficiently using a jq-like language
Documentation
#![cfg(feature = "serde_with")]

use serde::Deserialize;
use serde::Serialize;
use serde_cursor::Cursor;
use serde_json::json;
use serde_with::serde_as;

#[test]
fn serde_as_integration_full_roundtrip() {
    #[serde_as]
    #[derive(Serialize, Deserialize, Debug, PartialEq)]
    struct FullProject {
        #[serde(rename = "workspace")]
        #[serde_as(as = "Cursor!(package.version)")]
        version: String,
        name: String,
    }

    let input = json!({
        "name": "my-crate",
        "workspace": {
            "package": { "version": "1.2.3" },
        }
    });

    let project: FullProject = serde_json::from_value(input.clone()).unwrap();

    assert_eq!(project.version, "1.2.3");

    let output = serde_json::to_value(&project).unwrap();

    assert_eq!(input, output);
}