vcard_tui 0.1.0

Terminal UI application for managing vCard contacts.
use crate::state::selected::{Select, Selected};

#[derive(Clone)]
pub struct ConfirmState {
    pub kind: PopupConfirmKind,
    pub selected: Selected<PopupConfirmSelected>,
}

impl Default for ConfirmState {
    fn default() -> Self {
        Self {
            kind: PopupConfirmKind::Quit,
            selected: Selected::from(PopupConfirmSelected::Confirm),
        }
    }
}

#[derive(Clone, Eq, PartialEq)]
pub enum PopupConfirmKind {
    Quit,
    Delete,
}

#[derive(Clone, Eq, PartialEq)]
pub enum PopupConfirmSelected {
    Cancel,
    Confirm,
}

impl Select for Selected<PopupConfirmSelected> {
    fn prev(&mut self) {
        self.set(match self.get() {
            PopupConfirmSelected::Cancel => PopupConfirmSelected::Cancel,
            PopupConfirmSelected::Confirm => PopupConfirmSelected::Cancel,
        })
    }
    fn next(&mut self) {
        self.set(match self.get() {
            PopupConfirmSelected::Cancel => PopupConfirmSelected::Confirm,
            PopupConfirmSelected::Confirm => PopupConfirmSelected::Confirm,
        })
    }
}