ai_providers/openai/request/
include.rs1use std::str::FromStr;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::errors::ConversionError;
6
7#[derive(Debug, PartialEq, Serialize, Deserialize)]
8pub enum Include {
9 #[serde(rename = "file_search_call.results")]
10 FileSearchCallResults,
11 #[serde(rename = "message.input_image.image_url")]
12 MessageInputImageUrl,
13 #[serde(rename = "computer_call_output.output.image_url")]
14 ComputerCallOutputImageUrl,
15}
16
17impl FromStr for Include {
18 type Err = ConversionError;
19
20 fn from_str(s: &str) -> Result<Self, Self::Err> {
21 match s {
22 "file_search_call.results" => Ok(Include::FileSearchCallResults),
23 "message.input_image.image_url" => Ok(Include::MessageInputImageUrl),
24 "computer_call_output.output.image_url" => Ok(Include::ComputerCallOutputImageUrl),
25 _ => Err(ConversionError::FromStr(s.to_string())),
26 }
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use super::*;
33
34 #[test]
35 fn it_converts_str_to_include_value() {
36 let values = [
37 "file_search_call.results",
38 "message.input_image.image_url",
39 "computer_call_output.output.image_url",
40 ];
41
42 let expected = [
43 Include::FileSearchCallResults,
44 Include::MessageInputImageUrl,
45 Include::ComputerCallOutputImageUrl,
46 ];
47
48 for (index, value) in values.iter().enumerate() {
49 assert_eq!(Include::from_str(value).unwrap(), expected[index]);
50 }
51 }
52
53 #[test]
54 fn it_converts_include_into_json() {
55 for value in [
56 "file_search_call.results",
57 "message.input_image.image_url",
58 "computer_call_output.output.image_url",
59 ]
60 .iter()
61 {
62 let result = serde_json::to_value(Include::from_str(value).unwrap()).unwrap();
63
64 let expected = value.to_string();
65
66 assert_eq!(result, expected);
67 }
68 }
69}