vcard_tui 0.1.0

Terminal UI application for managing vCard contacts.
use vcard_parser::uuid::Uuid;
use vcard_parser::vcard::property::Property;

use crate::state::selected::{Select, Selected};

#[derive(Clone)]
pub struct PropertyRemoveState {
    pub selected: Selected<PopupRemoveSelected>,
    pub uuid: Uuid,
}

impl From<&Property> for PropertyRemoveState {
    fn from(property: &Property) -> Self {
        Self {
            selected: Selected::from(PopupRemoveSelected::Remove),
            uuid: property.get_uuid(),
        }
    }
}

#[derive(Clone, Eq, PartialEq)]
pub enum PopupRemoveSelected {
    Cancel,
    Remove,
}

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