Comparison with Serde
A side-by-side comparison of facet and serde derive macro attributes.
Container attributes
deny_unknown_fields
Produce an error when an unknown field is encountered during deserialization. The default behaviour
is to ignore field that are not known.
| Facet |
Serde |
#[derive(facet::Facet)]
#[facet(deny_unknown_fields)]
struct MyStruct {
field1: i32,
field2: Option<i32>,
}
|
#[derive(serde::Deserialize)]
#[serde(deny_unknown_fields)]
struct MyStruct {
field1: i32,
field2: Option<i32>,
}
|
default
Only allowed for structs, not for enums. During deserialization, any fields that are missing
from the input will be taken from the Default::default implementation of the struct. This is not
possible for enums because they can only have a single Default implementation producing a single
variant.
| Facet |
Serde |
#[derive(facet::Facet)]
#[facet(default)]
struct MyStruct {
field1: i32,
field2: Option<i32>,
}
impl Default for MyStruct {
fn default() -> Self {
Self {
field1: 1,
field2: Some(2),
}
}
}
|
#[derive(serde::Deserialize)]
#[serde(default)]
struct MyStruct {
field1: i32,
field2: Option<i32>,
}
impl Default for MyStruct {
fn default() -> Self {
Self {
field1: 1,
field2: Some(2),
}
}
}
|
rename_all
Rename all fields at once using a casing convention. Supported values are
"PascalCase"
"camelCase"
"snake_case"
"SCREAMING_SNAKE_CASE"
"kebab-case"
"SCREAMING-KEBAB-CASE"
| Facet |
Serde |
#[derive(facet::Facet)]
#[facet(rename_all = "camelCase")]
struct MyStruct {
field_one: i32,
}
|
#[derive(serde::Deserialize)]
#[serde(rename_all = "camelCase")]
struct MyStruct {
field_one: i32,
}
|
Field attributes
skip_serializing
Skip this field during serialization.
| Facet |
Serde |
#[derive(facet::Facet)]
struct MyStruct {
field1: i32,
#[facet(skip_serializing)]
field2: String,
}
|
#[derive(serde::Serialize)]
struct MyStruct {
field1: i32,
#[serde(skip_serializing)]
field2: String,
}
|
skip_serializing_if
Skip serializing this field when a condition is met. Typically used for Option fields when you
want to omit the field entirely from serialized output when the value is None.
| Facet |
Serde |
#[derive(facet::Facet)]
struct MyStruct {
#[facet(skip_serializing_if = |n| n % 2 == 0)]
field1: i32,
#[facet(skip_serializing_if = Option::is_none)]
field2: Option<i32>,
}
|
#[derive(serde::Serialize)]
struct MyStruct {
#[serde(skip_serializing_if = is_even)]
field1: i32,
#[serde(skip_serializing_if = "Option::is_none")]
field2: Option<i32>,
}
fn is_even(n: i32) -> bool {
n % 2 == 0
}
|
default
Use a specified function to provide a default value when deserializing if the field is missing from
input. You can either use default alone to use Default::default() for the field, or provide an
expression producing the default value.
| Facet |
Serde |
#[derive(facet::Facet)]
struct MyStruct {
field1: i32,
#[facet(default)]
field2: Vec<String>,
#[facet(default = 42))]
field3: i32,
#[facet(default = rand::random())]
field4: i32,
}
|
#[derive(serde::Deserialize)]
struct MyStruct {
field1: i32,
#[serde(default)]
field2: Vec<String>,
#[serde(default = "default_value")]
field3: i32,
#[serde(default = "rand::random")]
field4: i32,
}
fn default_value() -> i32 {
42
}
|