ref-view
ref-view provides #[derive(RefView)] for generating zero-copy reference
views over named structs and named-field enums.
use RefView;
By default the macro generates:
ItemView: a trait with field accessorsItemRef<'a>: a full reference view
Additional #[ref_view(name = ..., omit(...))] attributes generate views that
do not store omitted fields. Their accessors return None.
For enums, omit targets can be variant-qualified:
MVP limits:
- only non-generic types
- only named structs and named-field enum variants
Examples
Run the examples with:
cargo run --example basic_struct
cargo run --example derive_and_impl_trait
cargo run --example enum_table_reference
Struct Views
examples/basic_struct.rs shows a full UserRef<'a> and a
UserPublicView<'a> that omits sensitive fields:
Fields omitted by at least one view get Option<&T> accessors. The full view
returns Some(...); the omitted view returns None.
The same example also shows #[ref_view(trait_name = ConfigLike)], which makes
generated views implement ConfigLike instead of the default ConfigView.
Derives And Trait Implementations
examples/derive_and_impl_trait.rs shows how to make generated ref views derive
the same common traits as the source type:
Functions can be widened to accept the source type and generated views:
Normal impl blocks can be mirrored to generated ref views:
The macro always derives Clone and Copy for generated views. Extra derives
are explicit via #[ref_view(derive(...))] instead of copied automatically from
the source type, because derives such as Default may not make sense for
borrowed views.
The example also demonstrates trait-oriented patterns:
- functions taking
&impl UserView - generic functions with
T: UserView - blanket impls for local traits over every
T: UserView - widened helper functions via
#[ref_view::impl_fn(...)] - mirrored trait impls for generated ref views via
#[ref_view::impl_trait(...)], such as sharing oneDisplayimplementation acrossUser,UserRef<'_>, andPublicUserRef<'_>
Enum Views
examples/enum_table_reference.rs demonstrates a SQL-like formatter shared by
the source enum, its full ref view, and an omit view:
The formatter calls pivot() normally. Full views return the pivot; the omit
view returns None, so the same formatter can render a table reference without
the pivot clause.