1use std::{error, fmt};
2
3#[derive(Debug, Clone)]
4pub struct ResponseContent<T> {
5 pub status: reqwest::StatusCode,
6 pub content: String,
7 pub entity: Option<T>,
8}
9
10#[derive(Debug)]
11pub enum Error<T> {
12 Reqwest(reqwest::Error),
13 Serde(serde_json::Error),
14 Io(std::io::Error),
15 ResponseError(ResponseContent<T>),
16}
17
18impl<T> fmt::Display for Error<T> {
19 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
20 let (module, e) = match self {
21 Error::Reqwest(e) => ("reqwest", e.to_string()),
22 Error::Serde(e) => ("serde", e.to_string()),
23 Error::Io(e) => ("IO", e.to_string()),
24 Error::ResponseError(e) => ("response", format!("status code {}", e.status)),
25 };
26 write!(f, "error in {}: {}", module, e)
27 }
28}
29
30impl<T: fmt::Debug> error::Error for Error<T> {
31 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
32 Some(match self {
33 Error::Reqwest(e) => e,
34 Error::Serde(e) => e,
35 Error::Io(e) => e,
36 Error::ResponseError(_) => return None,
37 })
38 }
39}
40
41impl<T> From<reqwest::Error> for Error<T> {
42 fn from(e: reqwest::Error) -> Self {
43 Error::Reqwest(e)
44 }
45}
46
47impl<T> From<serde_json::Error> for Error<T> {
48 fn from(e: serde_json::Error) -> Self {
49 Error::Serde(e)
50 }
51}
52
53impl<T> From<std::io::Error> for Error<T> {
54 fn from(e: std::io::Error) -> Self {
55 Error::Io(e)
56 }
57}
58
59pub fn urlencode<T: AsRef<str>>(s: T) -> String {
60 ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
61}
62
63pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> {
64 if let serde_json::Value::Object(object) = value {
65 let mut params = vec![];
66
67 for (key, value) in object {
68 match value {
69 serde_json::Value::Object(_) => {
70 params.append(&mut parse_deep_object(&format!("{}[{}]", prefix, key), value))
71 }
72 serde_json::Value::Array(array) => {
73 for (i, value) in array.iter().enumerate() {
74 params.append(&mut parse_deep_object(&format!("{}[{}][{}]", prefix, key, i), value));
75 }
76 }
77 serde_json::Value::String(s) => params.push((format!("{}[{}]", prefix, key), s.clone())),
78 _ => params.push((format!("{}[{}]", prefix, key), value.to_string())),
79 }
80 }
81
82 return params;
83 }
84
85 unimplemented!("Only objects are supported with style=deepObject")
86}
87
88pub mod analytics_api;
89pub mod collections_api;
90pub mod conversations_api;
91pub mod curation_api;
92pub mod debug_api;
93pub mod documents_api;
94pub mod health_api;
95pub mod keys_api;
96pub mod operations_api;
97pub mod override_api;
98pub mod presets_api;
99pub mod stopwords_api;
100
101pub mod configuration;
102
103use std::sync::Arc;
104
105pub trait Api {
106 fn analytics_api(&self) -> &dyn analytics_api::AnalyticsApi;
107 fn collections_api(&self) -> &dyn collections_api::CollectionsApi;
108 fn conversations_api(&self) -> &dyn conversations_api::ConversationsApi;
109 fn curation_api(&self) -> &dyn curation_api::CurationApi;
110 fn debug_api(&self) -> &dyn debug_api::DebugApi;
111 fn documents_api(&self) -> &dyn documents_api::DocumentsApi;
112 fn health_api(&self) -> &dyn health_api::HealthApi;
113 fn keys_api(&self) -> &dyn keys_api::KeysApi;
114 fn operations_api(&self) -> &dyn operations_api::OperationsApi;
115 fn override_api(&self) -> &dyn override_api::OverrideApi;
116 fn presets_api(&self) -> &dyn presets_api::PresetsApi;
117 fn stopwords_api(&self) -> &dyn stopwords_api::StopwordsApi;
118}
119
120pub struct ApiClient {
121 analytics_api: Box<dyn analytics_api::AnalyticsApi>,
122 collections_api: Box<dyn collections_api::CollectionsApi>,
123 conversations_api: Box<dyn conversations_api::ConversationsApi>,
124 curation_api: Box<dyn curation_api::CurationApi>,
125 debug_api: Box<dyn debug_api::DebugApi>,
126 documents_api: Box<dyn documents_api::DocumentsApi>,
127 health_api: Box<dyn health_api::HealthApi>,
128 keys_api: Box<dyn keys_api::KeysApi>,
129 operations_api: Box<dyn operations_api::OperationsApi>,
130 override_api: Box<dyn override_api::OverrideApi>,
131 presets_api: Box<dyn presets_api::PresetsApi>,
132 stopwords_api: Box<dyn stopwords_api::StopwordsApi>,
133}
134
135impl ApiClient {
136 pub fn new(configuration: Arc<configuration::Configuration>) -> Self {
137 Self {
138 analytics_api: Box::new(analytics_api::AnalyticsApiClient::new(configuration.clone())),
139 collections_api: Box::new(collections_api::CollectionsApiClient::new(configuration.clone())),
140 conversations_api: Box::new(conversations_api::ConversationsApiClient::new(configuration.clone())),
141 curation_api: Box::new(curation_api::CurationApiClient::new(configuration.clone())),
142 debug_api: Box::new(debug_api::DebugApiClient::new(configuration.clone())),
143 documents_api: Box::new(documents_api::DocumentsApiClient::new(configuration.clone())),
144 health_api: Box::new(health_api::HealthApiClient::new(configuration.clone())),
145 keys_api: Box::new(keys_api::KeysApiClient::new(configuration.clone())),
146 operations_api: Box::new(operations_api::OperationsApiClient::new(configuration.clone())),
147 override_api: Box::new(override_api::OverrideApiClient::new(configuration.clone())),
148 presets_api: Box::new(presets_api::PresetsApiClient::new(configuration.clone())),
149 stopwords_api: Box::new(stopwords_api::StopwordsApiClient::new(configuration.clone())),
150 }
151 }
152}
153
154impl Api for ApiClient {
155 fn analytics_api(&self) -> &dyn analytics_api::AnalyticsApi {
156 self.analytics_api.as_ref()
157 }
158
159 fn collections_api(&self) -> &dyn collections_api::CollectionsApi {
160 self.collections_api.as_ref()
161 }
162
163 fn conversations_api(&self) -> &dyn conversations_api::ConversationsApi {
164 self.conversations_api.as_ref()
165 }
166
167 fn curation_api(&self) -> &dyn curation_api::CurationApi {
168 self.curation_api.as_ref()
169 }
170
171 fn debug_api(&self) -> &dyn debug_api::DebugApi {
172 self.debug_api.as_ref()
173 }
174
175 fn documents_api(&self) -> &dyn documents_api::DocumentsApi {
176 self.documents_api.as_ref()
177 }
178
179 fn health_api(&self) -> &dyn health_api::HealthApi {
180 self.health_api.as_ref()
181 }
182
183 fn keys_api(&self) -> &dyn keys_api::KeysApi {
184 self.keys_api.as_ref()
185 }
186
187 fn operations_api(&self) -> &dyn operations_api::OperationsApi {
188 self.operations_api.as_ref()
189 }
190
191 fn override_api(&self) -> &dyn override_api::OverrideApi {
192 self.override_api.as_ref()
193 }
194
195 fn presets_api(&self) -> &dyn presets_api::PresetsApi {
196 self.presets_api.as_ref()
197 }
198
199 fn stopwords_api(&self) -> &dyn stopwords_api::StopwordsApi {
200 self.stopwords_api.as_ref()
201 }
202}