ag_agent/model/
permission.rs1use std::fmt;
2use std::str::FromStr;
3
4#[derive(Clone, Copy, PartialEq, Eq, Debug, Default, Hash)]
6pub enum PermissionMode {
7 #[default]
9 AutoEdit,
10}
11
12impl PermissionMode {
13 pub fn label(self) -> &'static str {
15 "auto_edit"
16 }
17
18 pub fn display_label(self) -> &'static str {
20 "Auto Edit"
21 }
22}
23
24impl fmt::Display for PermissionMode {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 write!(f, "{}", self.label())
27 }
28}
29
30impl FromStr for PermissionMode {
31 type Err = String;
32
33 fn from_str(s: &str) -> Result<Self, Self::Err> {
34 match s {
35 "auto_edit" => Ok(PermissionMode::AutoEdit),
36 _ => Err(format!("Unknown permission mode: {s}")),
37 }
38 }
39}
40
41#[cfg(test)]
42mod tests {
43 use super::*;
44
45 #[test]
46 fn test_from_str_accepts_auto_edit() {
47 let permission_mode = "auto_edit";
49
50 let parsed_permission_mode = PermissionMode::from_str(permission_mode);
52
53 assert_eq!(parsed_permission_mode, Ok(PermissionMode::AutoEdit));
55 }
56
57 #[test]
58 fn test_from_str_rejects_removed_permission_modes() {
59 let removed_mode = "autonomous";
61
62 let parsed_permission_mode = PermissionMode::from_str(removed_mode);
64
65 assert_eq!(
67 parsed_permission_mode,
68 Err("Unknown permission mode: autonomous".to_string())
69 );
70 }
71
72 #[test]
73 fn test_default_uses_auto_edit_mode() {
74 let permission_mode = PermissionMode::default();
76
77 assert_eq!(permission_mode, PermissionMode::AutoEdit);
79 }
80
81 #[test]
82 fn test_label_and_display_label_return_persisted_and_user_facing_text() {
83 let permission_mode = PermissionMode::AutoEdit;
85
86 let label = permission_mode.label();
88 let display_label = permission_mode.display_label();
89
90 assert_eq!(label, "auto_edit");
92 assert_eq!(display_label, "Auto Edit");
93 }
94
95 #[test]
96 fn test_display_uses_persisted_label() {
97 let permission_mode = PermissionMode::AutoEdit;
99
100 let formatted = permission_mode.to_string();
102
103 assert_eq!(formatted, "auto_edit");
105 }
106}