# event_loop.rs - source
Source of the Rust file `maplibre/src/event_loop.rs`.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37

    use thiserror::Error;

    use crate::{
        environment::Environment,
        map::Map,
        window::{HeadedMapWindow, MapWindowConfig},
    };

    pub trait EventLoopConfig {
        type EventType: 'static;
        type EventLoopProxy: EventLoopProxy<Self::EventType>;

        fn create_proxy() -> Self::EventLoopProxy;
    }

    /// When sending events to an event loop errors can occur.
    #[derive(Error, Debug)]
    pub enum SendEventError {
        /// The event loop was already closed
        #[error("event loop is closed")]
        Closed,
    }

    pub trait EventLoopProxy<T: 'static> {
        fn send_event(&self, event: T) -> Result<(), SendEventError>;
    }

    pub trait EventLoop<ET: 'static + PartialEq> {
        type EventLoopProxy: EventLoopProxy<ET>;

        fn run<E>(self, map: Map<E>, max_frames: Option<u64>)
        where
            E: Environment,
            <E::MapWindowConfig as MapWindowConfig>::MapWindow: HeadedMapWindow;

        fn create_proxy(&self) -> Self::EventLoopProxy;
    }