Skip to main content

ralph/contracts/config/
enums.rs

1//! Configuration enums for project type, git revert mode, and scan prompt version.
2//!
3//! Responsibilities:
4//! - Define simple enum types used across configuration.
5//!
6//! Not handled here:
7//! - Complex config structs with merge behavior (see other config modules).
8
9use schemars::JsonSchema;
10use serde::{Deserialize, Serialize};
11
12/// Project type classification.
13#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default, JsonSchema)]
14#[serde(rename_all = "snake_case")]
15pub enum ProjectType {
16    #[default]
17    Code,
18    Docs,
19}
20
21/// Git revert mode for handling runner/supervision errors.
22#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default, JsonSchema)]
23#[serde(rename_all = "snake_case")]
24pub enum GitRevertMode {
25    #[default]
26    Ask,
27    Enabled,
28    Disabled,
29}
30
31impl std::str::FromStr for GitRevertMode {
32    type Err = &'static str;
33
34    fn from_str(value: &str) -> Result<Self, Self::Err> {
35        match value.trim().to_lowercase().as_str() {
36            "ask" => Ok(GitRevertMode::Ask),
37            "enabled" => Ok(GitRevertMode::Enabled),
38            "disabled" => Ok(GitRevertMode::Disabled),
39            _ => Err("git_revert_mode must be 'ask', 'enabled', or 'disabled'"),
40        }
41    }
42}
43
44/// Scan prompt version to use for scan operations.
45#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, Default, JsonSchema)]
46#[serde(rename_all = "snake_case")]
47pub enum ScanPromptVersion {
48    /// Version 1: Original rule-based scan prompts with fixed minimum task counts.
49    V1,
50    /// Version 2: Rubric-based scan prompts with quality-focused STOP CONDITION (default).
51    #[default]
52    V2,
53}