Skip to main content

HasFields

Trait HasFields 

Source
pub trait HasFields<'mem, 'facet> {
    // Required method
    fn fields(&self) -> FieldIter<'mem, 'facet> ;

    // Provided methods
    fn fields_for_serialize(&self) -> FieldsForSerializeIter<'mem, 'facet>  { ... }
    fn fields_for_binary_serialize(
        &self,
    ) -> FieldsForSerializeIter<'mem, 'facet>  { ... }
}
Expand description

Trait for types that have field methods

This trait allows code to be written generically over both structs and enums that provide field access and iteration capabilities.

Required Methods§

Source

fn fields(&self) -> FieldIter<'mem, 'facet>

Iterates over all fields in this type, providing both field metadata and value

Provided Methods§

Source

fn fields_for_serialize(&self) -> FieldsForSerializeIter<'mem, 'facet>

Iterates over fields in this type that should be included when it is serialized.

This respects #[facet(skip_serializing_if = ...)] and #[facet(skip_all_unless_truthy)] predicates, which is correct for self-describing formats like JSON where skipped fields can be reconstructed from the schema.

Source

fn fields_for_binary_serialize(&self) -> FieldsForSerializeIter<'mem, 'facet>

Iterates over fields for serialization to positional binary formats.

Unlike fields_for_serialize, this ignores skip_serializing_if predicates (including those from skip_all_unless_truthy). This is necessary for binary formats like postcard where fields are identified by position rather than name - skipping fields would cause a mismatch between serialized and expected field positions during deserialization.

Note: This still respects unconditional #[facet(skip)] and #[facet(skip_serializing)] attributes, as those indicate fields that should never be serialized regardless of format.

Implementors§

Source§

impl<'mem, 'facet> HasFields<'mem, 'facet> for PeekEnum<'mem, 'facet>

Source§

impl<'mem, 'facet> HasFields<'mem, 'facet> for PeekStruct<'mem, 'facet>