1use serde::{Deserialize, Serialize};
4use std::fmt;
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize, Default)]
11#[serde(rename_all = "lowercase")]
12pub enum OperatingMode {
13 #[default]
15 Repo,
16 Workspace,
18 Ecosystem,
20}
21
22impl fmt::Display for OperatingMode {
23 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
24 match self {
25 Self::Repo => write!(f, "repo"),
26 Self::Workspace => write!(f, "workspace"),
27 Self::Ecosystem => write!(f, "ecosystem"),
28 }
29 }
30}
31
32#[cfg(test)]
33mod tests {
34 use super::*;
35
36 #[test]
37 fn test_display() {
38 assert_eq!(OperatingMode::Repo.to_string(), "repo");
39 assert_eq!(OperatingMode::Workspace.to_string(), "workspace");
40 assert_eq!(OperatingMode::Ecosystem.to_string(), "ecosystem");
41 }
42
43 #[test]
44 fn test_default_is_repo() {
45 assert_eq!(OperatingMode::default(), OperatingMode::Repo);
46 }
47
48 #[test]
49 fn test_serde_roundtrip() {
50 for mode in [
51 OperatingMode::Repo,
52 OperatingMode::Workspace,
53 OperatingMode::Ecosystem,
54 ] {
55 let json = serde_json::to_string(&mode).unwrap();
56 let back: OperatingMode = serde_json::from_str(&json).unwrap();
57 assert_eq!(mode, back);
58 }
59 }
60
61 #[test]
62 fn test_serde_values() {
63 let json = serde_json::to_string(&OperatingMode::Repo).unwrap();
64 assert_eq!(json, "\"repo\"");
65
66 let json = serde_json::to_string(&OperatingMode::Workspace).unwrap();
67 assert_eq!(json, "\"workspace\"");
68
69 let json = serde_json::to_string(&OperatingMode::Ecosystem).unwrap();
70 assert_eq!(json, "\"ecosystem\"");
71 }
72}