topcoat_runtime/
event_handler.rs1use topcoat_core::context::Cx;
2use topcoat_view::{Attribute, AttributeKeyViewParts, AttributeViewParts, PartsWriter, Unescaped};
3
4use crate::{Event, Expr};
5
6pub trait EventHandlerFn {}
7
8impl<T, R> EventHandlerFn for T where T: Fn(Event) -> R {}
9
10pub struct EventHandler<K, F> {
14 key: K,
15 value: Expr<F>,
16}
17
18impl<K, F> EventHandler<K, F>
19where
20 F: EventHandlerFn,
21{
22 #[inline]
23 pub fn new(key: K, value: Expr<F>) -> Self {
24 Self { key, value }
25 }
26}
27
28impl<K, F> AttributeViewParts for EventHandler<K, F>
29where
30 K: AttributeKeyViewParts,
31{
32 #[inline]
33 fn into_view_parts(self, cx: &Cx, parts: &mut PartsWriter<'_>) {
34 Attribute::new(
37 (Unescaped::new_unchecked("data-topcoat-on:"), self.key),
38 Unescaped::new_unchecked(self.value.js),
39 )
40 .into_view_parts(cx, parts);
41 }
42}