#deserialize-json #serde-json #serialize-deserialize #null #undefined #value #variant

js_option

An Option-like type with separate null and undefined variants

2 releases

0.1.1 Jun 18, 2022
0.1.0 May 10, 2021

#908 in Encoding

Download history 2590/week @ 2024-11-15 2456/week @ 2024-11-22 3754/week @ 2024-11-29 2734/week @ 2024-12-06 2976/week @ 2024-12-13 1647/week @ 2024-12-20 1580/week @ 2024-12-27 2883/week @ 2025-01-03 3439/week @ 2025-01-10 2985/week @ 2025-01-17 3250/week @ 2025-01-24 4418/week @ 2025-01-31 4152/week @ 2025-02-07 3946/week @ 2025-02-14 4169/week @ 2025-02-21 3577/week @ 2025-02-28

16,560 downloads per month
Used in 51 crates (5 directly)

MIT license

10KB
139 lines

js_option

This crate provides a type JsOption that is very similar to the standard library's Option type except that it has three variants:

  • Some(value): Like Option::Some
  • Null: Explicitly not some value
  • Undefined: Implicitly not some value

This type can be useful when you want to deserialize JSON to a Rust struct and not loose information: A regular Option deserializes to None from both an explicit null or a missing field (this is due to special casing of Option in the Deserialize and Serialize derive macros, for other types a missing field will make deserialization fail unless there is a #[serde(skip)], #[serde(skip_deserializing)] or #[serde(default)] attribute).

Example:

# extern crate serde_crate as serde;
use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize)]
struct MyStruct {
    #[serde(default, skip_serializing_if = "JsOption::is_undefined")]
    my_field: JsOption<String>,
}

License

MIT

Dependencies

~155KB