The #[minimal]
syntax seems clunky. Maybe rather:
trait Foo {
fn foo(&self);
fn bar(&self);
fn quux(&self);
#[requires(foo,quux)]
default fn bar(&self) {
/* implement on top of foo and quux */
}
#[requires(bar)]
default fn foo(&self) {
/* implement on top of bar */
}
}
Or even
trait Foo {
fn foo(&self);
fn bar(&self);
fn quux(&self);
#[requires(foo)]
default {
fn bar(&self) {
/* implement on top of foo */
}
fn quux(&self) {
/* implement on top of foo */
}
}
}
Of course, there’s the problem of what to do when we have
trait Foo {
fn foo(&self);
fn bar(&self);
fn quux(&self);
#[requires(foo)] default fn quux(&self) { /* ... */ }
#[requires(bar)] default fn quux(&self) { /* ... */ }
}
impl Foo for Bar {
fn foo(&self) {}
fn bar(&self) {}
}
I guess in that case none of the default quux
bodies should apply.