On Wed, 28 Jan 2026 13:53:23 -0800, Boqun Feng wrote:
> Therefore here is the effort to unify them into a proc-macro based
> solution. Field and HasField traits are introduced to generify the
> "Has A" relationship, and a derive macro #[derive(HasField)] is also
> added to support automatically implementing HasField trait.
Hi Boqun,
One naming concern: the #[field] attribute feels ambiguous since in
Rust every struct member is already called a "field." When reading:
#[derive(HasField)]
struct MyStruct {
value: i32,
#[field]
work: Work<MyStruct>,
}
it's not immediately obvious why "work" gets #[field] but "value"
does not, as both are struct fields.
Would something like #[project] be clearer?
Similarly, HasField could become HasProjection or ProjectField to
better distinguish the trait's purpose from the general concept of fields.
--
Joel Fernandes