elio 1.3.0

Snappy, batteries-included terminal file manager with rich previews, inline images, bulk actions, and trash support.
Documentation
use serde::Deserialize;

#[derive(Clone, Copy)]
pub(crate) struct UiConfig {
    pub show_top_bar: bool,
    pub grid_zoom: u8,
    pub show_hidden: bool,
    pub start_in_grid: bool,
}

impl Default for UiConfig {
    fn default() -> Self {
        Self {
            show_top_bar: false,
            grid_zoom: 1,
            show_hidden: false,
            start_in_grid: false,
        }
    }
}

#[derive(Deserialize, Default)]
pub(super) struct UiConfigOverride {
    show_top_bar: Option<bool>,
    grid_zoom: Option<i64>,
    show_hidden: Option<bool>,
    start_in_grid: Option<bool>,
}

impl UiConfig {
    pub(super) fn apply_override(&mut self, overrides: UiConfigOverride) {
        if let Some(show_top_bar) = overrides.show_top_bar {
            self.show_top_bar = show_top_bar;
        }
        if let Some(zoom) = overrides.grid_zoom {
            self.grid_zoom = zoom.clamp(0, 2) as u8;
        }
        if let Some(show_hidden) = overrides.show_hidden {
            self.show_hidden = show_hidden;
        }
        if let Some(start_in_grid) = overrides.start_in_grid {
            self.start_in_grid = start_in_grid;
        }
    }
}