zsui 0.3.0-alpha.2

Rust-first feature-gated native UI framework for Win32, AppKit, and Linux.
Documentation
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum MainTimerTask {
    StartupRecovery,
    VvWatch,
    VvShow,
    Paste,
    SearchDebounce,
    HiddenReclaim,
    ClipboardRetry,
    DpiFit,
    ScrollFade,
    EdgeAutoHide,
    OutsideHide,
    CloudSync,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct MainTimerIds {
    pub startup_recovery: usize,
    pub vv_watch: usize,
    pub vv_show: usize,
    pub paste: usize,
    pub search_debounce: usize,
    pub hidden_reclaim: usize,
    pub clipboard_retry: usize,
    pub dpi_fit: usize,
    pub scroll_fade: usize,
    pub edge_auto_hide: usize,
    pub outside_hide: usize,
    pub cloud_sync: usize,
}

pub fn main_timer_task_for_id(timer_id: usize, ids: MainTimerIds) -> Option<MainTimerTask> {
    if timer_id == ids.startup_recovery {
        Some(MainTimerTask::StartupRecovery)
    } else if timer_id == ids.vv_watch {
        Some(MainTimerTask::VvWatch)
    } else if timer_id == ids.vv_show {
        Some(MainTimerTask::VvShow)
    } else if timer_id == ids.paste {
        Some(MainTimerTask::Paste)
    } else if timer_id == ids.search_debounce {
        Some(MainTimerTask::SearchDebounce)
    } else if timer_id == ids.hidden_reclaim {
        Some(MainTimerTask::HiddenReclaim)
    } else if timer_id == ids.clipboard_retry {
        Some(MainTimerTask::ClipboardRetry)
    } else if timer_id == ids.dpi_fit {
        Some(MainTimerTask::DpiFit)
    } else if timer_id == ids.scroll_fade {
        Some(MainTimerTask::ScrollFade)
    } else if timer_id == ids.edge_auto_hide {
        Some(MainTimerTask::EdgeAutoHide)
    } else if timer_id == ids.outside_hide {
        Some(MainTimerTask::OutsideHide)
    } else if timer_id == ids.cloud_sync {
        Some(MainTimerTask::CloudSync)
    } else {
        None
    }
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum SettingsTimerTask {
    HideScrollbar,
    ClearSaveHint,
    DpiFit,
}

#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct SettingsTimerIds {
    pub hide_scrollbar: usize,
    pub clear_save_hint: usize,
    pub dpi_fit: usize,
}

pub fn settings_timer_task_for_id(
    timer_id: usize,
    ids: SettingsTimerIds,
) -> Option<SettingsTimerTask> {
    if timer_id == ids.hide_scrollbar {
        Some(SettingsTimerTask::HideScrollbar)
    } else if timer_id == ids.clear_save_hint {
        Some(SettingsTimerTask::ClearSaveHint)
    } else if timer_id == ids.dpi_fit {
        Some(SettingsTimerTask::DpiFit)
    } else {
        None
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn main_timer_ids_map_to_stable_tasks() {
        let ids = MainTimerIds {
            startup_recovery: 1,
            vv_watch: 2,
            vv_show: 3,
            paste: 4,
            search_debounce: 5,
            hidden_reclaim: 6,
            clipboard_retry: 7,
            dpi_fit: 8,
            scroll_fade: 9,
            edge_auto_hide: 10,
            outside_hide: 11,
            cloud_sync: 12,
        };

        assert_eq!(
            main_timer_task_for_id(1, ids),
            Some(MainTimerTask::StartupRecovery)
        );
        assert_eq!(main_timer_task_for_id(8, ids), Some(MainTimerTask::DpiFit));
        assert_eq!(
            main_timer_task_for_id(12, ids),
            Some(MainTimerTask::CloudSync)
        );
        assert_eq!(main_timer_task_for_id(99, ids), None);
    }

    #[test]
    fn settings_timer_ids_map_to_stable_tasks() {
        let ids = SettingsTimerIds {
            hide_scrollbar: 21,
            clear_save_hint: 22,
            dpi_fit: 23,
        };

        assert_eq!(
            settings_timer_task_for_id(21, ids),
            Some(SettingsTimerTask::HideScrollbar)
        );
        assert_eq!(
            settings_timer_task_for_id(23, ids),
            Some(SettingsTimerTask::DpiFit)
        );
        assert_eq!(settings_timer_task_for_id(99, ids), None);
    }
}