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]
8 AutoEdit,
9}
10
11impl PermissionMode {
12 pub fn label(self) -> &'static str {
14 "auto_edit"
15 }
16
17 pub fn display_label(self) -> &'static str {
19 "Auto Edit"
20 }
21}
22
23impl fmt::Display for PermissionMode {
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 write!(f, "{}", self.label())
26 }
27}
28
29impl FromStr for PermissionMode {
30 type Err = String;
31
32 fn from_str(s: &str) -> Result<Self, Self::Err> {
33 match s {
34 "auto_edit" => Ok(PermissionMode::AutoEdit),
35 _ => Err(format!("Unknown permission mode: {s}")),
36 }
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_from_str_accepts_auto_edit() {
46 let permission_mode = "auto_edit";
48
49 let parsed_permission_mode = PermissionMode::from_str(permission_mode);
51
52 assert_eq!(parsed_permission_mode, Ok(PermissionMode::AutoEdit));
54 }
55
56 #[test]
57 fn test_from_str_rejects_removed_permission_modes() {
58 let removed_mode = "autonomous";
60
61 let parsed_permission_mode = PermissionMode::from_str(removed_mode);
63
64 assert_eq!(
66 parsed_permission_mode,
67 Err("Unknown permission mode: autonomous".to_string())
68 );
69 }
70
71 #[test]
72 fn test_default_uses_auto_edit_mode() {
73 let permission_mode = PermissionMode::default();
75
76 assert_eq!(permission_mode, PermissionMode::AutoEdit);
78 }
79
80 #[test]
81 fn test_label_and_display_label_return_persisted_and_user_facing_text() {
82 let permission_mode = PermissionMode::AutoEdit;
84
85 let label = permission_mode.label();
87 let display_label = permission_mode.display_label();
88
89 assert_eq!(label, "auto_edit");
91 assert_eq!(display_label, "Auto Edit");
92 }
93
94 #[test]
95 fn test_display_uses_persisted_label() {
96 let permission_mode = PermissionMode::AutoEdit;
98
99 let formatted = permission_mode.to_string();
101
102 assert_eq!(formatted, "auto_edit");
104 }
105}