pub enum Field {
Primitive(FieldPrimitive),
Struct(FieldStruct),
Enum(FieldEnum),
Relation(FieldRelation),
}Expand description
Maps a model field to its database storage representation.
Different field types have different storage strategies:
- Primitive fields map to a single column
- Struct fields flatten an embedded struct to multiple columns
- Enum fields map to a discriminant column plus per-variant data columns
- Relation fields (
BelongsTo,HasMany,HasOne) don’t have direct column storage
§Examples
use toasty_core::schema::mapping::Field;
match &field {
Field::Primitive(p) => println!("column {:?}", p.column),
Field::Struct(s) => println!("{} nested fields", s.fields.len()),
Field::Enum(e) => println!("discriminant col {:?}", e.discriminant.column),
Field::Relation(_) => println!("relation (no columns)"),
}Variants§
Primitive(FieldPrimitive)
A primitive field stored in a single column.
Struct(FieldStruct)
An embedded struct field flattened into multiple columns.
Enum(FieldEnum)
An embedded enum field stored as a discriminant column plus per-variant data columns.
Relation(FieldRelation)
A relation field that doesn’t map to columns in this table.
Implementations§
Source§impl Field
impl Field
Sourcepub fn field_mask(&self) -> PathFieldSet
pub fn field_mask(&self) -> PathFieldSet
Returns the update coverage mask for this field.
Each primitive (leaf) field in the model is assigned a unique bit. The mask for a given mapping field is the set of those bits that correspond to the primitives it covers:
Primitive→ singleton set containing only its own bitStruct→ union of all nested primitive bits (recursively)Enum→ singleton set (the whole enum value changes atomically)Relation→ singleton set (assigned a bit for uniform tracking)
Masks are used during update lowering to determine whether a partial
update fully covers an embedded field or only touches some of its
sub-fields. Intersecting changed_mask with a field’s field_mask
yields the subset of that field’s primitives being updated; equality
with the full field_mask means full coverage.
Sourcepub fn sub_projection(&self) -> &Projection
pub fn sub_projection(&self) -> &Projection
Returns the sub-projection from the root model field to this field within the embedded type hierarchy. Identity for root-level fields.
Sourcepub fn is_relation(&self) -> bool
pub fn is_relation(&self) -> bool
Returns true if this is a Field::Relation.
Sourcepub fn as_primitive(&self) -> Option<&FieldPrimitive>
pub fn as_primitive(&self) -> Option<&FieldPrimitive>
Returns the inner FieldPrimitive if this is a Primitive variant,
or None otherwise.
Sourcepub fn as_primitive_mut(&mut self) -> Option<&mut FieldPrimitive>
pub fn as_primitive_mut(&mut self) -> Option<&mut FieldPrimitive>
Returns a mutable reference to the inner FieldPrimitive if this is
a Primitive variant, or None otherwise.
Sourcepub fn as_struct(&self) -> Option<&FieldStruct>
pub fn as_struct(&self) -> Option<&FieldStruct>
Returns the inner FieldStruct if this is a Struct variant, or
None otherwise.
Sourcepub fn as_enum(&self) -> Option<&FieldEnum>
pub fn as_enum(&self) -> Option<&FieldEnum>
Returns the inner FieldEnum if this is an Enum variant, or
None otherwise.
Sourcepub fn columns(&self) -> impl Iterator<Item = (ColumnId, usize)> + '_
pub fn columns(&self) -> impl Iterator<Item = (ColumnId, usize)> + '_
Returns an iterator over all (column, lowering) pairs impacted by this field.
For primitive fields, yields a single pair. For struct fields, yields all flattened columns. For enum fields, yields the discriminant column plus all variant data columns. For relation fields, yields nothing.