Skip to main content

commit_wizard/engine/models/policy/
enforcement.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
4#[serde(rename_all = "lowercase")]
5pub enum ScopeMode {
6    Disabled,
7    Optional,
8    Required,
9}
10
11#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
12#[serde(rename_all = "snake_case")]
13pub enum TicketSource {
14    Branch,
15    Prompt,
16    BranchOrPrompt,
17    Disabled,
18}
19
20#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
21#[serde(rename_all = "snake_case")]
22pub enum CommitEnforcementScope {
23    AllBranches,
24    ProtectedBranches,
25    None,
26}
27
28#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
29#[serde(rename_all = "lowercase")]
30pub enum ChangelogFormat {
31    Markdown,
32    Json,
33}
34
35#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
36#[serde(rename_all = "snake_case")]
37#[derive(Default)]
38pub enum EmojiMode {
39    #[default]
40    Prepend,
41    Append,
42    Replace,
43    None,
44}
45
46#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
47pub enum BumpLevel {
48    None,
49    Patch,
50    Minor,
51    Major,
52}
53
54pub fn decide_bump(breaking_keywords: &[String], minor: &[String], patch: &[String]) -> BumpLevel {
55    if !breaking_keywords.is_empty() {
56        BumpLevel::Major
57    } else if !minor.is_empty() {
58        BumpLevel::Minor
59    } else if !patch.is_empty() {
60        BumpLevel::Patch
61    } else {
62        BumpLevel::None
63    }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
67pub enum AiProvider {
68    Copilot,
69}
70
71impl AiProvider {
72    #[allow(clippy::should_implement_trait)]
73    pub fn from_str(provider: &str) -> AiProvider {
74        match provider.to_lowercase().as_str() {
75            "copilot" => AiProvider::Copilot,
76            _ => AiProvider::Copilot, // default to Copilot if unknown
77        }
78    }
79
80    pub fn as_str(&self) -> &str {
81        match self {
82            AiProvider::Copilot => "copilot",
83        }
84    }
85}
86
87impl std::fmt::Display for AiProvider {
88    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
89        write!(f, "{}", self.as_str())
90    }
91}