rmux-server 0.1.1

Tokio daemon and request dispatcher for the RMUX terminal multiplexer.
Documentation
use rmux_proto::{Request, RmuxError};

use super::parse_pane_target;
use super::tokens::CommandTokens;

pub(super) fn parse_copy_mode(mut args: CommandTokens) -> Result<Request, RmuxError> {
    let mut target = None;
    let mut source = None;
    let mut page_down = false;
    let mut exit_on_scroll = false;
    let mut hide_position = false;
    let mut mouse_drag_start = false;
    let mut cancel_mode = false;
    let mut scrollbar_scroll = false;
    let mut page_up = false;

    while let Some(token) = args.peek() {
        match token {
            "--" => {
                let _ = args.optional();
                break;
            }
            "-d" => {
                let _ = args.optional();
                page_down = true;
            }
            "-e" => {
                let _ = args.optional();
                exit_on_scroll = true;
            }
            "-H" => {
                let _ = args.optional();
                hide_position = true;
            }
            "-M" => {
                let _ = args.optional();
                mouse_drag_start = true;
            }
            "-q" => {
                let _ = args.optional();
                cancel_mode = true;
            }
            "-S" => {
                let _ = args.optional();
                scrollbar_scroll = true;
            }
            "-s" => {
                let _ = args.optional();
                source = Some(parse_pane_target(
                    "copy-mode",
                    args.required("-s src-pane")?,
                )?);
            }
            "-t" => {
                let _ = args.optional();
                target = Some(parse_pane_target("copy-mode", args.required("-t target")?)?);
            }
            "-u" => {
                let _ = args.optional();
                page_up = true;
            }
            _ => break,
        }
    }

    args.no_extra("copy-mode")?;
    Ok(Request::CopyMode(rmux_proto::CopyModeRequest {
        target,
        page_down,
        exit_on_scroll,
        hide_position,
        mouse_drag_start,
        cancel_mode,
        scrollbar_scroll,
        source,
        page_up,
    }))
}

pub(super) fn parse_clock_mode(mut args: CommandTokens) -> Result<Request, RmuxError> {
    let mut target = None;

    while let Some(token) = args.peek() {
        match token {
            "--" => {
                let _ = args.optional();
                break;
            }
            "-t" => {
                let _ = args.optional();
                target = Some(parse_pane_target(
                    "clock-mode",
                    args.required("-t target")?,
                )?);
            }
            _ => break,
        }
    }

    args.no_extra("clock-mode")?;
    Ok(Request::ClockMode(rmux_proto::ClockModeRequest { target }))
}