Derive Macro rocket::UriDisplayQuery [−][src]
#[derive(UriDisplayQuery)] { // Attributes available to this derive: #[field] }
Expand description
Derive for the UriDisplay<Query>
trait.
The UriDisplay<Query>
derive can be applied to enums and structs. When
applied to an enum, the enum must have at least one variant. When applied to
a struct, the struct must have at least one field.
#[derive(UriDisplayQuery)] enum Kind { A(String), B(usize), } #[derive(UriDisplayQuery)] struct MyStruct { name: String, id: usize, kind: Kind, }
Each field’s type is required to implement UriDisplay<Query>
.
The derive generates an implementation of the UriDisplay<Query>
trait.
The implementation calls Formatter::write_named_value()
for every named
field, using the field’s name (unless overridden, explained next) as the
name
parameter, and Formatter::write_value()
for every unnamed field
in the order the fields are declared.
The derive accepts one field attribute: field
, with the following syntax:
field := 'name' '=' '"' FIELD_NAME '"'
| 'value' '=' '"' FIELD_VALUE '"'
FIELD_NAME := valid HTTP field name
FIELD_VALUE := valid HTTP field value
When applied to a struct, the attribute can only contain name
and looks
as follows:
#[derive(UriDisplayQuery)] struct MyStruct { name: String, id: usize, #[field(name = "type")] #[field(name = "kind")] kind: Kind, }
The field attribute directs that a different field name be used when calling
Formatter::write_named_value()
for the given field. The value of the
name
attribute is used instead of the structure’s actual field name. If
more than one field
attribute is applied to a field, the first name is
used. In the example above, the field MyStruct::kind
is rendered with a
name of type
.
The attribute can slso be applied to variants of C-like enums; it may only
contain value
and looks as follows:
#[derive(UriDisplayQuery)] enum Kind { File, #[field(value = "str")] #[field(value = "string")] String, Other }
The field attribute directs that a different value be used when calling
Formatter::write_named_value()
for the given variant. The value of the
value
attribute is used instead of the variant’s actual name. If more than
one field
attribute is applied to a variant, the first value is used. In
the example above, the variant Kind::String
will render with a value of
str
.