batch_mode_batch_schema/
batch_message.rs

1// ---------------- [ File: src/batch_message.rs ]
2crate::ix!();
3
4#[derive(Debug,Serialize,Deserialize)]
5pub struct BatchMessage {
6    role:    MessageRole,
7    content: BatchMessageContent,
8    refusal: Option<String>,
9}
10
11impl BatchMessage {
12
13    pub fn role(&self) -> &MessageRole {
14        &self.role
15    }
16
17    pub fn content(&self) -> &BatchMessageContent {
18        &self.content
19    }
20
21    pub fn refusal(&self) -> Option<&String> {
22        self.refusal.as_ref()
23    }
24}
25
26#[cfg(test)]
27mod tests {
28    use super::*;
29    use serde_json::json;
30
31    // Test suite for BatchMessage
32    #[test]
33    fn test_batch_message_deserialization() {
34        // Message with all fields
35        let json = r#"{
36            "role": "assistant",
37            "content": "Hello, world!",
38            "refusal": null
39        }"#;
40        let message: BatchMessage = serde_json::from_str(json).unwrap();
41        assert_eq!(message.role(), &MessageRole::Assistant);
42        assert_eq!(message.content(), "Hello, world!");
43        assert_eq!(message.refusal(), None);
44
45        // Message with refusal
46        let json = r#"{
47            "role": "assistant",
48            "content": "I'm sorry, but I cannot assist with that request.",
49            "refusal": "Policy refusal"
50        }"#;
51        let message: BatchMessage = serde_json::from_str(json).unwrap();
52        assert_eq!(message.refusal(), Some(&"Policy refusal".to_string()));
53
54        // Message with unknown role
55        let json = r#"{
56            "role": "unknown_role",
57            "content": "Content with unknown role",
58            "refusal": null
59        }"#;
60        let message: BatchMessage = serde_json::from_str(json).unwrap();
61        assert_eq!(
62            message.role(),
63            &MessageRole::Unknown("unknown_role".to_string())
64        );
65
66        // Message with missing refusal field
67        let json = r#"{
68            "role": "assistant",
69            "content": "Content without refusal"
70        }"#;
71        let message: BatchMessage = serde_json::from_str(json).unwrap();
72        assert_eq!(message.refusal(), None);
73
74        // Message with empty content
75        let json = r#"{
76            "role": "assistant",
77            "content": "",
78            "refusal": null
79        }"#;
80        let message: BatchMessage = serde_json::from_str(json).unwrap();
81        assert_eq!(message.content(), "");
82
83        // Message with invalid role (non-string)
84        let json = r#"{
85            "role": 123,
86            "content": "Invalid role",
87            "refusal": null
88        }"#;
89        let result: Result<BatchMessage, _> = serde_json::from_str(json);
90        assert!(result.is_err());
91
92        // Message with missing content field
93        let json = r#"{
94            "role": "assistant",
95            "refusal": null
96        }"#;
97        let result: Result<BatchMessage, _> = serde_json::from_str(json);
98        assert!(result.is_err());
99    }
100}