claude_agent/common/
source_type.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash, Serialize, Deserialize)]
4#[serde(rename_all = "lowercase")]
5pub enum SourceType {
6 Builtin,
7 #[default]
8 User,
9 Project,
10 Managed,
11}
12
13impl std::fmt::Display for SourceType {
14 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
15 match self {
16 Self::Builtin => write!(f, "builtin"),
17 Self::User => write!(f, "user"),
18 Self::Project => write!(f, "project"),
19 Self::Managed => write!(f, "managed"),
20 }
21 }
22}
23
24impl SourceType {
25 pub fn from_str_opt(s: Option<&str>) -> Self {
26 match s {
27 Some("builtin") => Self::Builtin,
28 Some("project") => Self::Project,
29 Some("managed") => Self::Managed,
30 _ => Self::User,
31 }
32 }
33}
34
35#[cfg(test)]
36mod tests {
37 use super::*;
38
39 #[test]
40 fn test_default() {
41 assert_eq!(SourceType::default(), SourceType::User);
42 }
43
44 #[test]
45 fn test_display() {
46 assert_eq!(SourceType::Builtin.to_string(), "builtin");
47 assert_eq!(SourceType::User.to_string(), "user");
48 assert_eq!(SourceType::Project.to_string(), "project");
49 assert_eq!(SourceType::Managed.to_string(), "managed");
50 }
51
52 #[test]
53 fn test_from_str_opt() {
54 assert_eq!(
55 SourceType::from_str_opt(Some("builtin")),
56 SourceType::Builtin
57 );
58 assert_eq!(
59 SourceType::from_str_opt(Some("project")),
60 SourceType::Project
61 );
62 assert_eq!(
63 SourceType::from_str_opt(Some("managed")),
64 SourceType::Managed
65 );
66 assert_eq!(SourceType::from_str_opt(Some("user")), SourceType::User);
67 assert_eq!(SourceType::from_str_opt(None), SourceType::User);
68 assert_eq!(SourceType::from_str_opt(Some("unknown")), SourceType::User);
69 }
70
71 #[test]
72 fn test_serde() {
73 let json = serde_json::to_string(&SourceType::Builtin).unwrap();
74 assert_eq!(json, "\"builtin\"");
75
76 let parsed: SourceType = serde_json::from_str("\"project\"").unwrap();
77 assert_eq!(parsed, SourceType::Project);
78 }
79}