45 lines
989 B
Rust
45 lines
989 B
Rust
mod ctx;
|
|
mod manager;
|
|
mod rsc;
|
|
|
|
pub use ctx::*;
|
|
pub use manager::*;
|
|
pub use rsc::*;
|
|
|
|
pub trait Event: Sized + 'static + Clone {
|
|
type Data<'a>: Clone = ();
|
|
type State: Default = ();
|
|
#[allow(unused_variables)]
|
|
fn should_run<'a>(&self, data: &Self::Data<'a>) -> Option<Self::Data<'a>> {
|
|
Some(data.clone())
|
|
}
|
|
}
|
|
|
|
pub trait EventLike {
|
|
type Event: Event;
|
|
fn into_event(self) -> Self::Event;
|
|
}
|
|
|
|
impl<E: Event> EventLike for E {
|
|
type Event = Self;
|
|
|
|
fn into_event(self) -> Self::Event {
|
|
self
|
|
}
|
|
}
|
|
|
|
pub trait EventFn<Rsc: HasEvents, Data>: Fn(EventCtx<Rsc, Data>, &mut Rsc) + 'static {}
|
|
impl<Rsc: HasEvents, F: Fn(EventCtx<Rsc, Data>, &mut Rsc) + 'static, Data> EventFn<Rsc, Data>
|
|
for F
|
|
{
|
|
}
|
|
|
|
pub trait WidgetEventFn<Rsc: HasEvents, Data, W: ?Sized>:
|
|
Fn(EventIdCtx<Rsc, Data, W>, &mut Rsc) + 'static
|
|
{
|
|
}
|
|
impl<Rsc: HasEvents, F: Fn(EventIdCtx<Rsc, Data, W>, &mut Rsc) + 'static, Data, W: ?Sized>
|
|
WidgetEventFn<Rsc, Data, W> for F
|
|
{
|
|
}
|