commit_wizard/engine/models/policy/
enforcement.rs1use 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, }
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}