schemars/docs/1.1-attributes.md
2019-12-24 22:04:20 +00:00

4.9 KiB

layout title parent nav_order
default Attributes Deriving JsonSchema 1

Attributes

You can add attributes to your types to customize Schemars's derived JsonSchema implementation.

Serde also allows setting #[serde(...)] attributes which change how types are serialized, and Schemars will generally respect these attributes to ensure that generated schemas will match how the type is serialized by serde_json. #[serde(...)] attributes can be overriden using #[schemars(...)] attributes, which behave identically (e.g. #[schemars(rename_all = "camelCase")]). You may find this useful if you want to change the generated schema without affecting Serde's behaviour, or if you're just not using Serde.

Table of Contents

  1. Supported Serde Attributes
    1. rename
    2. rename_all
    3. tag / untagged
    4. default
    5. skip
    6. skip_serializing
    7. skip_deserializing
    8. flatten
    9. with
  2. Other Attributes
    1. Doc Comments (doc)

Supported Serde Attributes

#[serde(rename = "name")] / #[schemars(rename = "name")]

Set on a struct, enum, field or variant to use the given name in the generated schema instead of the Rust name. When used on a struct or enum, the given name will be used as the title for root schemas, and as the schema identifier for schemas referenced from another schema's $ref property.

Serde docs: container / variant / field

#[serde(rename_all = "...")] / #[schemars(rename_all = "...")]

Set on a struct, enum or variant to rename all fields according to the given case convention (see the Serde docs for details).

Serde docs: container / variant

#[serde(tag = "type")] / #[schemars(tag = "type")] / #[serde(untagged)] / #[schemars(untagged)]

Set on an enum to generate the schema for the internally tagged or untagged representation of this enum. Schemars does not currently support the adjacently tagged representation (#4).

Serde docs: tag / untagged

#[serde(default)] / #[schemars(default)] / #[serde(default = "path")] / #[schemars(default = "path")]

Set on a struct or field to give fields a default value, which excludes them from the schema's required properties. The default will also be set on the field's schema's default property, unless it is skipped by a #[serde(skip_serializing_if = "..."] attribute on the field. If the field also has a #[serde(serialize_with = "..."] property set, then it will be used to serialize the default value.

Serde docs: container / field

#[serde(skip)] / #[schemars(skip)]

Set on a variant or field to prevent it from appearing in any generated schema.

Serde docs: variant / field

#[serde(skip_serializing)] / #[schemars(skip_serializing)]

Set on a field of a (non-tuple) struct to set the writeOnly property on that field's schema. Serde also allows this attribute on variants or tuple struct fields, but this will have no effect on generated schemas.

Serde docs: field

#[serde(skip_deserializing)] / #[schemars(skip_deserializing)]

Set on a variant or field. When set on a field of a (non-tuple) struct, that field's schema will have the readOnly property set. When set on a variant or tuple struct field Schemars will treat this the same as a skip attribute.

Serde docs: variant / field

#[serde(flatten)] / #[schemars(flatten)]

#[serde(with = "module")] / #[schemars(with = "module")]

Other Attributes

Doc Comments (#[doc = "..."])

TODO!