Open Veetaha opened 2 weeks ago
In Java there is lombok - they do it by separate annotation @Singular
on field, that can take a string that would be new method name.
I've published a 3.1
release of bon
that adds #[builder(field)]
annotation allowing you to define custom fields. This can be used in combination with custom methods to define special setters for collections. I believe this may be good enough for many use cases since it provides great flexibility to how you'd like these special setters to look like.
See the example of this feature in the new Custom Fields guide.
@andrzejressel do you think #[builder(field)]
would cover your use case, or would you like to have some attribute to generate setters for collections via bon
? IIRC you are using bon
in generated code, so defining custom fields/methods could be fine in this context, since you may define their template in one place.
This issue is based on prior thoughts in the alternatives section of the docs.
Design
I don't have a good design for the attribute yet. There are many unresolved questions.
push
(front or back? forVecDeque
),insert
).#[builder(attr_name)]
or#[builder(setters(attr_name))]
?Self
by&mut
or by value? The typestate won't change after a value is pushed into a colleciton, so&mut self
is possible. However by value seems like a more natural fit to the current design where the setters always requireself
by value.&mut
and by-valueself
?Do We Need This At All?
How often would people want such setters? If that would be needed at a rare occasion, then people could use custom fields (#189) with custom methods to implement this.
I'll keep this issue on hold
Prior Art
#[builder(setter(each))]
inderive_builder
buildstructor
A note for the community from the maintainers
Please vote on this issue by adding a 👍 reaction to help the maintainers with prioritizing it. You may add a comment describing your real use case related to this issue for us to better understand the problem domain.