openai_struct/models/
chat_completion_request_message.rs

1/*
2 * OpenAI API
3 *
4 * The OpenAI REST API. Please see pub https://platform.openai.com/docs/api-reference for more details.
5 *
6 * OpenAPI spec pub version: 2.3.0
7 *
8 * Generated pub by: https://github.com/swagger-api/swagger-codegen.git
9 */
10
11#[allow(unused_imports)]
12use serde_json::Value;
13use crate::{
14    ChatCompletionRequestAssistantMessage, 
15    ChatCompletionRequestDeveloperMessage, 
16    ChatCompletionRequestFunctionMessage, 
17    ChatCompletionRequestSystemMessage, 
18    ChatCompletionRequestToolMessage, 
19    ChatCompletionRequestUserMessage,
20};
21
22#[derive(Debug, PartialEq, Serialize, Deserialize)]
23#[serde(tag = "role")]
24pub enum ChatCompletionRequestMessage {
25    #[serde(rename = "developer")] 
26    Developer(ChatCompletionRequestDeveloperMessage),
27    #[serde(rename = "system")]
28    System(ChatCompletionRequestSystemMessage),
29    #[serde(rename = "user")]
30    User(ChatCompletionRequestUserMessage),
31    #[serde(rename = "assistant")]
32    Assistant(ChatCompletionRequestAssistantMessage),
33    #[serde(rename = "tool")]
34    Tool(ChatCompletionRequestToolMessage),
35    #[serde(rename = "function")]
36    Function(ChatCompletionRequestFunctionMessage),
37}
38
39#[test]
40fn test_serde_chat_completion_request_message() {
41    use serde_json::Value;
42    
43    let tmp = ChatCompletionRequestMessage::User(
44        ChatCompletionRequestUserMessage {
45            content: Value::String("once upon a time".to_string()),
46            name: None,
47        }
48    );
49    
50    // 序列化测试
51    let serialized = serde_json::to_string(&tmp).unwrap();
52    assert_eq!(
53        serialized, 
54        r#"{"role":"user","content":"once upon a time","name":null}"#
55    );
56    
57    // 反序列化测试(明确指定类型)
58    let deserialized: ChatCompletionRequestMessage = serde_json::from_str(&serialized).unwrap();
59    assert_eq!(tmp, deserialized);
60    
61    // 直接反序列化测试
62    let emm: ChatCompletionRequestMessage = serde_json::from_str(
63        r#"{"content":"once upon a time","name":null,"role":"user"}"#
64    ).unwrap();
65    assert_eq!(tmp, emm);
66}