async_component_winit/
lib.rs

1#![doc = include_str!("../README.md")]
2
3pub mod executor;
4
5use async_component_core::AsyncComponent;
6use executor::{ExecutorPollEvent, WinitExecutor};
7use winit::{
8    event::Event,
9    event_loop::{ControlFlow, EventLoop},
10};
11
12/// Trait for handling winit events on component.
13pub trait WinitComponent {
14    fn on_event(&mut self, event: &mut Event<()>, control_flow: &mut ControlFlow);
15}
16
17/// Convenience method for initializing executor and running winit eventloop
18pub fn run<C: AsyncComponent + WinitComponent + 'static>(
19    event_loop: EventLoop<ExecutorPollEvent>,
20    func: impl FnOnce() -> C,
21) -> ! {
22    let executor = WinitExecutor::new(event_loop);
23
24    executor.run(func)
25}