openai_interface/files/list/
request.rs1use url::Url;
7
8use crate::{
9 errors::OapiError,
10 rest::get::{Get, GetNoStream},
11};
12
13#[derive(Debug, Clone, Default)]
15pub struct ListFilesRequest {
16 pub after: Option<String>,
23 pub limit: Option<u32>,
26 pub order: Option<ListOrder>,
28 pub purpose: Option<String>,
30}
31
32#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
35pub enum ListOrder {
36 Asc,
37 #[default]
38 Desc,
39}
40
41impl ListOrder {
42 fn as_str(self) -> &'static str {
43 match self {
44 ListOrder::Asc => "asc",
45 ListOrder::Desc => "desc",
46 }
47 }
48}
49
50impl Get for ListFilesRequest {
51 #[allow(rustdoc::bare_urls)]
52 fn build_url(&self, base_url: &str) -> Result<String, OapiError> {
54 let mut url = Url::parse(base_url.trim_end_matches('/')).map_err(OapiError::UrlError)?;
55 url.path_segments_mut()
56 .map_err(|_| OapiError::UrlCannotBeBase(base_url.to_string()))?
57 .push("files");
58
59 if self.purpose.is_some()
63 || self.limit.is_some()
64 || self.after.is_some()
65 || self.order.is_some()
66 {
67 let mut query_pairs = url.query_pairs_mut();
68
69 if let Some(ref purpose) = self.purpose {
70 query_pairs.append_pair("purpose", purpose);
71 }
72
73 if let Some(limit) = self.limit {
74 query_pairs.append_pair("limit", &limit.to_string());
75 }
76
77 if let Some(order) = self.order {
78 query_pairs.append_pair("order", order.as_str());
79 }
80
81 if let Some(ref after) = self.after {
82 query_pairs.append_pair("after", after);
83 }
84 }
85
86 Ok(url.to_string())
87 }
88}
89
90impl GetNoStream for ListFilesRequest {
91 type Response = super::response::ListFilesResponse;
92}