quinjet 0.0.48

A fast, live, keyboard-first Git source-control interface for the terminal
use clap::ValueEnum;

pub(crate) const HOST_OSC_CODE: u16 = 6973;

#[derive(Debug, Clone, Copy, PartialEq, Eq, ValueEnum)]
pub(crate) enum Client {
    Edith,
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) enum HostAction {
    OpenProjectNewTab,
    OpenWorktreeCurrentTab,
}

impl HostAction {
    const fn payload(self) -> &'static str {
        match self {
            Self::OpenProjectNewTab => "quinjet;open-new-tab",
            Self::OpenWorktreeCurrentTab => "quinjet;open-worktree",
        }
    }

    pub(crate) fn sequence(self) -> String {
        format!("\u{1b}]{HOST_OSC_CODE};{}\u{1b}\\", self.payload())
    }
}

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

    #[test]
    fn host_actions_use_the_quinjet_osc_channel() {
        assert_eq!(
            HostAction::OpenProjectNewTab.sequence(),
            "\u{1b}]6973;quinjet;open-new-tab\u{1b}\\"
        );
        assert_eq!(
            HostAction::OpenWorktreeCurrentTab.sequence(),
            "\u{1b}]6973;quinjet;open-worktree\u{1b}\\"
        );
    }
}