1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, derive_more::Display)]
5pub enum Role {
6 #[display("system")]
8 System,
9 #[display("user")]
11 User,
12 #[display("assistant")]
14 Assistant,
15 #[display("tool")]
17 Tool,
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn display() {
26 assert_eq!(Role::System.to_string(), "system");
27 assert_eq!(Role::User.to_string(), "user");
28 assert_eq!(Role::Assistant.to_string(), "assistant");
29 assert_eq!(Role::Tool.to_string(), "tool");
30 }
31
32 #[test]
33 fn serde_roundtrip() {
34 let json = serde_json::to_string(&Role::Assistant).unwrap();
35 assert_eq!(json, "\"Assistant\"");
36 let role: Role = serde_json::from_str(&json).unwrap();
37 assert_eq!(role, Role::Assistant);
38 }
39}