Mutators as a path among others
Opened this issue · 1 comments
AlexandreCassagne commented
I have an example use case that either does not work currently, or I am deeply misunderstanding the documentation ;-)
#[derive(Debug, TypedBuilder)]
struct CalendarEvent<Tz: chrono::offset::TimeZone> {
#[builder(setter(into))]
title: String,
// Goal: User should be able to set start(...), then may EITHER:
// - set end(...)
// - call with_duration(chrono::Duration) which would automatically add duration to start and set end.
#[builder(
mutators(
fn with_duration(&mut self, duration: chrono::Duration) {
self.end = self.start.clone().checked_add_signed(duration).unwrap();
}
)
)]
start: chrono::DateTime<Tz>,
#[builder(???)]
end: chrono::DateTime<Tz>,
}
The "goal" comment describes the use case, i.e. two different paths to the completed builder.
Of course, there may be multiple other paths.
I have tried several combinations but none work. Is it because I am using generics? Or am I trying to do something that is currently unsupported?
idanarye commented
Mutators change the value of the builder payload, but they cannot change its type. Having mutators that can change the type is a more complex feature (which would also require more complex syntax) that is not currently implemented.