Documentation
#[derive(Clone)]
pub enum AppState {
    Init,
    Initialized {
        search: String,
        counter_tick: u64,
    },
}

impl AppState {
    pub fn initialized() -> Self {
        let counter_tick = 0;
        let search = String::new();
        Self::Initialized {
            counter_tick,
            search,
        }
    }

    pub fn is_initialized(&self) -> bool {
        matches!(self, &Self::Initialized { .. })
    }

    pub fn incr_tick(&mut self) {
        if let Self::Initialized { counter_tick, .. } = self {
            *counter_tick += 1;
        }
    }

    pub fn count_tick(&self) -> Option<u64> {
        if let Self::Initialized { counter_tick, .. } = self {
            Some(*counter_tick)
        } else {
            None
        }
    }
}

impl Default for AppState {
    fn default() -> Self {
        Self::Init
    }
}