parley-cli 0.1.0-rc4

Terminal-first review tool for AI-generated code changes
Documentation
use std::str::FromStr;

use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum AiProvider {
    Codex,
    Claude,
    Opencode,
}

impl AiProvider {
    pub fn as_str(self) -> &'static str {
        match self {
            Self::Codex => "codex",
            Self::Claude => "claude",
            Self::Opencode => "opencode",
        }
    }
}

impl FromStr for AiProvider {
    type Err = String;

    fn from_str(input: &str) -> Result<Self, Self::Err> {
        match input {
            "codex" => Ok(Self::Codex),
            "claude" => Ok(Self::Claude),
            "opencode" => Ok(Self::Opencode),
            _ => Err(format!("invalid ai provider: {input}")),
        }
    }
}

#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum AiSessionMode {
    Reply,
    Refactor,
}

impl AiSessionMode {
    pub fn as_str(self) -> &'static str {
        match self {
            Self::Reply => "reply",
            Self::Refactor => "refactor",
        }
    }
}

impl FromStr for AiSessionMode {
    type Err = String;

    fn from_str(input: &str) -> Result<Self, Self::Err> {
        match input {
            "reply" => Ok(Self::Reply),
            "refactor" => Ok(Self::Refactor),
            _ => Err(format!("invalid ai session mode: {input}")),
        }
    }
}