structural-typing 0.1.9

Type-level field presence tracking for Rust structs, inspired by TypeScript
Documentation
#![cfg(feature = "serde")]

use serde::Deserialize;
use structural_typing::{select, structural};

#[structural]
#[derive(Deserialize, Debug, PartialEq)]
struct DeserializeOnly {
    name: String,
    value: u32,
}

#[test]
fn deserialize_only_struct() {
    let json = r#"{"name":"test","value":42}"#;
    let result: DeserializeOnly<deserialize_only::with::all> = serde_json::from_str(json).unwrap();
    assert_eq!(result.name, "test");
    assert_eq!(result.value, 42);
}

#[test]
fn deserialize_only_partial() {
    let json = r#"{"name":"test","value":42}"#;
    let result: DeserializeOnly<select!(deserialize_only: name)> =
        serde_json::from_str(json).unwrap();
    assert_eq!(result.name, "test");
}