1use super::types::KnowledgeListResponse;
2use crate::ZaiResult;
3use crate::client::ZaiClient;
4
5#[derive(Debug, Clone, Default, serde::Serialize, validator::Validate)]
7#[allow(clippy::new_without_default)]
8pub struct KnowledgeListQuery {
9 #[serde(skip_serializing_if = "Option::is_none")]
11 #[validate(range(min = 1))]
12 pub page: Option<u32>,
13 #[serde(skip_serializing_if = "Option::is_none")]
15 #[validate(range(min = 1))]
16 pub size: Option<u32>,
17}
18
19impl KnowledgeListQuery {
20 #[allow(clippy::new_without_default)]
22 pub fn new() -> Self {
23 Self {
24 page: Some(1),
25 size: Some(10),
26 }
27 }
28 pub fn with_page(mut self, page: u32) -> Self {
30 self.page = Some(page);
31 self
32 }
33 pub fn with_size(mut self, size: u32) -> Self {
35 self.size = Some(size);
36 self
37 }
38
39 fn pairs(&self) -> Vec<(&'static str, String)> {
42 let mut params: Vec<(&'static str, String)> = Vec::new();
43 if let Some(page) = self.page.as_ref() {
44 params.push(("page", page.to_string()));
45 }
46 if let Some(size) = self.size.as_ref() {
47 params.push(("size", size.to_string()));
48 }
49 params
50 }
51}
52
53#[allow(clippy::new_without_default)]
58pub struct KnowledgeListRequest {
59 query: KnowledgeListQuery,
60}
61
62impl KnowledgeListRequest {
63 #[allow(clippy::new_without_default)]
65 pub fn new() -> Self {
66 Self {
67 query: KnowledgeListQuery::new(),
68 }
69 }
70
71 pub fn with_query(mut self, q: KnowledgeListQuery) -> Self {
73 self.query = q;
74 self
75 }
76
77 pub async fn send_via(&self, client: &ZaiClient) -> ZaiResult<KnowledgeListResponse> {
79 let params = self.query.pairs();
80 let route = crate::client::routes::KNOWLEDGE_LIST;
81 let url = client.endpoints().resolve_route_with_query(
82 route,
83 &[],
84 ¶ms
85 .iter()
86 .map(|(k, v)| (*k, v.as_str()))
87 .collect::<Vec<_>>(),
88 )?;
89 client
90 .send_empty::<KnowledgeListResponse>(route.method(), url)
91 .await
92 }
93
94 pub async fn send_via_with_query(
97 mut self,
98 client: &ZaiClient,
99 q: &KnowledgeListQuery,
100 ) -> ZaiResult<KnowledgeListResponse> {
101 use validator::Validate;
102 q.validate()?;
103 self.query = q.clone();
104 self.send_via(client).await
105 }
106}