use crate::layout::{Ui, WidgetId, WidgetIdFn, WidgetLike}; pub trait WidgetAttr { type Input; fn run(ui: &mut Ui, id: &WidgetId, input: Self::Input); } pub trait Attrable { fn attr>(self, input: A::Input) -> impl WidgetIdFn; } impl, Tag> Attrable for WL { fn attr>(self, input: A::Input) -> impl WidgetIdFn { |ui| { let id = self.add(ui); A::run(ui, &id, input); id } } }