op_primitives/components/
challenger.rs1use std::fmt::Display;
2
3use enum_variants_strings::EnumVariantsStrings;
4use serde::{Deserialize, Serialize};
5use strum::EnumIter;
6
7#[derive(
9 Default, Copy, Clone, PartialEq, EnumVariantsStrings, Deserialize, Serialize, EnumIter,
10)]
11#[serde(rename_all = "kebab-case")]
12#[enum_variants_strings_transform(transform = "kebab_case")]
13pub enum ChallengerAgent {
14 #[default]
16 OpChallengerGo,
17 OpChallengerRust,
19}
20
21impl std::fmt::Debug for ChallengerAgent {
22 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
23 write!(f, "{}", self.to_str())
24 }
25}
26
27impl std::str::FromStr for ChallengerAgent {
28 type Err = eyre::Report;
29
30 fn from_str(s: &str) -> Result<Self, Self::Err> {
31 if s == ChallengerAgent::OpChallengerGo.to_str() {
32 return Ok(ChallengerAgent::OpChallengerGo);
33 }
34 if s == ChallengerAgent::OpChallengerRust.to_str() {
35 return Ok(ChallengerAgent::OpChallengerRust);
36 }
37 eyre::bail!("Invalid challenger agent: {}", s)
38 }
39}
40
41impl Display for ChallengerAgent {
42 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
43 write!(f, "{}", self.to_str())
44 }
45}
46
47#[cfg(test)]
48mod tests {
49 use super::*;
50
51 #[test]
52 fn test_deserialize_string() {
53 assert_eq!(
54 serde_json::from_str::<ChallengerAgent>(r#""op-challenger-go""#).unwrap(),
55 ChallengerAgent::OpChallengerGo
56 );
57 assert_eq!(
58 serde_json::from_str::<ChallengerAgent>(r#""op-challenger-rust""#).unwrap(),
59 ChallengerAgent::OpChallengerRust
60 );
61 }
62
63 #[test]
64 fn test_debug_string() {
65 assert_eq!(
66 format!("{:?}", ChallengerAgent::OpChallengerGo),
67 "op-challenger-go"
68 );
69 assert_eq!(
70 format!("{:?}", ChallengerAgent::OpChallengerRust),
71 "op-challenger-rust"
72 );
73 }
74
75 #[test]
76 fn test_challenger_agent_from_str() {
77 assert_eq!(
78 "op-challenger-go".parse::<ChallengerAgent>().unwrap(),
79 ChallengerAgent::OpChallengerGo
80 );
81 assert_eq!(
82 "op-challenger-rust".parse::<ChallengerAgent>().unwrap(),
83 ChallengerAgent::OpChallengerRust
84 );
85 assert!("invalid".parse::<ChallengerAgent>().is_err());
86 }
87
88 #[test]
89 fn test_challenger_agent_display() {
90 assert_eq!(
91 format!("{}", ChallengerAgent::OpChallengerGo),
92 "op-challenger-go"
93 );
94 assert_eq!(
95 format!("{}", ChallengerAgent::OpChallengerRust),
96 "op-challenger-rust"
97 );
98 }
99}