Container attributes
-
#[serde(rename = "name")]
{#rename}
Serialize and deserialize this struct or enum with the given name instead of its Rust name.
Allows specifying independent names for serialization vs deserialization:
#[serde(rename(serialize = "ser_name"))]
#[serde(rename(deserialize = "de_name"))]
-
#[serde(rename(serialize = "ser_name", deserialize = "de_name"))]
-
#[serde(rename_all = "...")]
{#rename_all}
Rename all the fields (if this is a struct) or variants (if this is an enum)
according to the given case convention. The possible values are "lowercase"
,
"UPPERCASE"
, "PascalCase"
, "camelCase"
, "snake_case"
,
"SCREAMING_SNAKE_CASE"
, "kebab-case"
, "SCREAMING-KEBAB-CASE"
.
Allows specifying independent cases for serialization vs deserialization:
#[serde(rename_all(serialize = "..."))]
#[serde(rename_all(deserialize = "..."))]
-
#[serde(rename_all(serialize = "...", deserialize = "..."))]
-
#[serde(deny_unknown_fields)]
{#deny_unknown_fields}
Always error during deserialization when encountering unknown fields. When this attribute is not present, by default unknown fields are ignored for self-describing formats like JSON.
Note: this attribute is not supported in combination with [flatten
],
neither on the outer struct nor on the flattened field.
-
#[serde(tag = "type")]
{#tag}
Use the internally tagged enum representation for this enum, with the given tag. See enum representations for details on this representation.
-
#[serde(tag = "t", content = "c")]
{#tag--content}
Use the adjacently tagged enum representation for this enum, with the given field names for the tag and content. See enum representations for details on this representation.
-
#[serde(untagged)]
{#untagged}
Use the untagged enum representation for this enum. See enum representations for details on this representation.
-
#[serde(bound = "T: MyTrait")]
{#bound}
Where-clause for the Serialize
and Deserialize
impls. This replaces any
trait bounds inferred by Serde.
Allows specifying independent bounds for serialization vs deserialization:
#[serde(bound(serialize = "T: MySerTrait"))]
#[serde(bound(deserialize = "T: MyDeTrait"))]
-
#[serde(bound(serialize = "T: MySerTrait", deserialize = "T: MyDeTrait"))]
-
#[serde(default)]
{#default}
When deserializing, any missing fields should be filled in from the struct's
implementation of Default
. Only allowed on structs.
-
#[serde(default = "path")]
{#default--path}
When deserializing, any missing fields should be filled in from the object
returned by the given function or method. The function must be callable as
fn() -> T
. For example default = "my_default"
would invoke my_default()
and default = "SomeTrait::some_default"
would invoke
SomeTrait::some_default()
. Only allowed on structs.
-
#[serde(remote = "...")]
{#remote}
This is used for deriving Serialize
and Deserialize
for remote
types.
-
#[serde(transparent)]
{#transparent}
Serialize and deserialize a newtype struct or a braced struct with one field
exactly the same as if its one field were serialized and deserialized by
itself. Analogous to #[repr(transparent)]
.
-
#[serde(from = "FromType")]
{#from}
Deserialize this type by deserializing into FromType
, then converting. This
type must implement From<FromType>
, and FromType
must implement
Deserialize
.
-
#[serde(try_from = "FromType")]
{#try_from}
Deserialize this type by deserializing into FromType
, then converting
fallibly. This type must implement TryFrom<FromType>
with an error type that
implements Display
, and FromType
must implement Deserialize
.
-
#[serde(into = "IntoType")]
{#into}
Serialize this type by converting it into the specified IntoType
and
serializing that. This type must implement Clone
and Into<IntoType>
, and
IntoType
must implement Serialize
.
-
#[serde(crate = "...")]
{#crate}
Specify a path to the serde
crate instance to use when referring to Serde
APIs from generated code. This is normally only applicable when invoking
re-exported Serde derives from a public macro in a different crate.