async_dashscope/operation/file/
param.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct FileUploadParam {
6 pub files: Vec<String>,
8 pub purpose: String,
10 #[serde(skip_serializing_if = "Option::is_none")]
12 pub descriptions: Option<Vec<String>>,
13}
14
15impl FileUploadParam {
16 pub fn builder() -> FileUploadParamBuilder {
17 FileUploadParamBuilder::default()
18 }
19}
20
21#[derive(Default)]
22pub struct FileUploadParamBuilder {
23 files: Option<Vec<String>>,
24 purpose: Option<String>,
25 descriptions: Option<Vec<String>>,
26}
27
28impl FileUploadParamBuilder {
29 pub fn files<T: Into<String>>(mut self, files: Vec<T>) -> Self {
30 self.files = Some(files.into_iter().map(|f| f.into()).collect());
31 self
32 }
33
34 pub fn purpose<T: Into<String>>(mut self, purpose: T) -> Self {
35 self.purpose = Some(purpose.into());
36 self
37 }
38
39 pub fn descriptions<T: Into<String>>(mut self, descriptions: Vec<T>) -> Self {
40 self.descriptions = Some(descriptions.into_iter().map(|d| d.into()).collect());
41 self
42 }
43
44 pub fn build(self) -> Result<FileUploadParam, String> {
45 let files = self.files.unwrap_or_default();
46 if files.is_empty() {
47 return Err("Files cannot be empty".to_string());
48 }
49
50 let purpose = self.purpose.ok_or("Purpose is required")?;
51
52 Ok(FileUploadParam {
53 files,
54 purpose,
55 descriptions: self.descriptions,
56 })
57 }
58}