1use serde::{Deserialize, Serialize};
4use std::fmt;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
8#[serde(rename_all = "kebab-case")]
9pub enum ServiceDomain {
10 Search,
12 Foundry,
14}
15
16impl ServiceDomain {
17 pub fn display_name(&self) -> &'static str {
19 match self {
20 ServiceDomain::Search => "Azure AI Search",
21 ServiceDomain::Foundry => "Microsoft Foundry",
22 }
23 }
24
25 pub fn directory_prefix(&self) -> &'static str {
27 match self {
28 ServiceDomain::Search => "search",
29 ServiceDomain::Foundry => "foundry",
30 }
31 }
32}
33
34impl fmt::Display for ServiceDomain {
35 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
36 write!(f, "{}", self.display_name())
37 }
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_display_names() {
46 assert_eq!(ServiceDomain::Search.display_name(), "Azure AI Search");
47 assert_eq!(ServiceDomain::Foundry.display_name(), "Microsoft Foundry");
48 }
49
50 #[test]
51 fn test_directory_prefixes() {
52 assert_eq!(ServiceDomain::Search.directory_prefix(), "search");
53 assert_eq!(ServiceDomain::Foundry.directory_prefix(), "foundry");
54 }
55
56 #[test]
57 fn test_display_trait() {
58 assert_eq!(format!("{}", ServiceDomain::Search), "Azure AI Search");
59 assert_eq!(format!("{}", ServiceDomain::Foundry), "Microsoft Foundry");
60 }
61
62 #[test]
63 fn test_serde_roundtrip() {
64 let domain = ServiceDomain::Foundry;
65 let json = serde_json::to_string(&domain).unwrap();
66 assert_eq!(json, "\"foundry\"");
67 let back: ServiceDomain = serde_json::from_str(&json).unwrap();
68 assert_eq!(back, domain);
69 }
70
71 #[test]
72 fn test_serde_roundtrip_search() {
73 let domain = ServiceDomain::Search;
74 let json = serde_json::to_string(&domain).unwrap();
75 assert_eq!(json, "\"search\"");
76 let back: ServiceDomain = serde_json::from_str(&json).unwrap();
77 assert_eq!(back, domain);
78 }
79}