#[derive(AsChangeset)]
{
// Attributes available to this derive:
#[diesel]
#[table_name]
#[column_name]
#[primary_key]
#[changeset_options]
}
Expand description
Implements AsChangeset
To implement AsChangeset
this derive needs to know the corresponding table
type. By default, it uses the snake_case
type name with an added s
from
the current scope.
It is possible to change this default by using #[diesel(table_name = something)]
.
If a field name of your struct differs
from the name of the corresponding column, you can annotate the field with
#[diesel(column_name = some_column_name)]
.
Your struct can also contain fields which implement AsChangeset
. This is
useful when you want to have one field map to more than one column (for
example, an enum that maps to a label and a value column). Add
#[diesel(embed)]
to any such fields.
To provide custom serialization behavior for a field, you can use
#[diesel(serialize_as = SomeType)]
. If this attribute is present, Diesel
will call .into
on the corresponding field and serialize the instance of SomeType
,
rather than the actual field on your struct. This can be used to add custom behavior for a
single field, or use types that are otherwise unsupported by Diesel.
Normally, Diesel produces two implementations of the AsChangeset
trait for your
struct using this derive: one for an owned version and one for a borrowed version.
Using #[diesel(serialize_as)]
implies a conversion using .into
which consumes the underlying value.
Hence, once you use #[diesel(serialize_as)]
, Diesel can no longer insert borrowed
versions of your struct.
By default, any Option
fields on the struct are skipped if their value is
None
. If you would like to assign NULL
to the field instead, you can
annotate your struct with #[diesel(treat_none_as_null = true)]
.
§Attributes
§Optional container attributes
#[diesel(treat_none_as_null = true)]
, specifies that the derive should treatNone
values asNULL
. By defaultOption::<T>::None
is just skipped. To insert aNULL
using default behavior useOption::<Option<T>>::Some(None)
#[diesel(table_name = path::to::table)]
, specifies a path to the table for which the current type is a changeset. The path is relative to the current module. If this attribute is not used, the type name converted tosnake_case
with an addeds
is used as table name.#[diesel(primary_key(id1, id2))]
to specify the struct field that that corresponds to the primary key. If not used,id
will be assumed as primary key field
§Optional field attributes
#[diesel(column_name = some_column_name)]
, overrides the column name of the current field tosome_column_name
. By default, the field name is used as column name.#[diesel(embed)]
, specifies that the current field maps not only to a single database field, but is a struct that implementsAsChangeset
.#[diesel(serialize_as = SomeType)]
, instead of serializing the actual field type, Diesel will convert the field intoSomeType
using.into
and serialize that instead. By default, this derive will serialize directly using the actual field type.#[diesel(treat_none_as_null = true/false)]
, overrides the container-leveltreat_none_as_null
attribute for the current field.