synwire_core/messages/
traits.rs1use crate::messages::Message;
4
5pub trait MessageLike {
22 fn to_message(&self) -> Message;
24}
25
26impl MessageLike for Message {
27 fn to_message(&self) -> Message {
28 self.clone()
29 }
30}
31
32impl MessageLike for &str {
33 fn to_message(&self) -> Message {
34 Message::human(*self)
35 }
36}
37
38impl MessageLike for String {
39 fn to_message(&self) -> Message {
40 Message::human(self)
41 }
42}
43
44impl MessageLike for (&str, &str) {
45 fn to_message(&self) -> Message {
48 match self.0 {
49 "ai" | "assistant" => Message::ai(self.1),
50 "system" => Message::system(self.1),
51 _ => Message::human(self.1),
53 }
54 }
55}
56
57#[cfg(test)]
58#[allow(clippy::unwrap_used)]
59mod tests {
60 use super::*;
61
62 #[test]
63 fn test_message_like_from_str() {
64 let msg = "Hello".to_message();
65 assert_eq!(msg.message_type(), "human");
66 assert_eq!(msg.content().as_text(), "Hello");
67 }
68
69 #[test]
70 fn test_message_like_from_string() {
71 let s = String::from("Hello");
72 let msg = s.to_message();
73 assert_eq!(msg.message_type(), "human");
74 }
75
76 #[test]
77 fn test_message_like_from_message() {
78 let original = Message::ai("Hi");
79 let msg = original.to_message();
80 assert_eq!(msg.message_type(), "ai");
81 }
82
83 #[test]
84 fn test_message_like_from_tuple_human() {
85 let msg = ("human", "Hello").to_message();
86 assert_eq!(msg.message_type(), "human");
87 }
88
89 #[test]
90 fn test_message_like_from_tuple_user() {
91 let msg = ("user", "Hello").to_message();
92 assert_eq!(msg.message_type(), "human");
93 }
94
95 #[test]
96 fn test_message_like_from_tuple_ai() {
97 let msg = ("ai", "Hi").to_message();
98 assert_eq!(msg.message_type(), "ai");
99 }
100
101 #[test]
102 fn test_message_like_from_tuple_assistant() {
103 let msg = ("assistant", "Hi").to_message();
104 assert_eq!(msg.message_type(), "ai");
105 }
106
107 #[test]
108 fn test_message_like_from_tuple_system() {
109 let msg = ("system", "Be helpful").to_message();
110 assert_eq!(msg.message_type(), "system");
111 }
112
113 #[test]
114 fn test_message_like_from_tuple_unknown_defaults_to_human() {
115 let msg = ("unknown_role", "Hello").to_message();
116 assert_eq!(msg.message_type(), "human");
117 }
118}