1use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum CheckOplSyntaxError {
22 Status400(models::ErrorGeneric),
23 DefaultResponse(models::ErrorGeneric),
24 UnknownValue(serde_json::Value),
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29#[serde(untagged)]
30pub enum CreateRelationshipError {
31 Status400(models::ErrorGeneric),
32 DefaultResponse(models::ErrorGeneric),
33 UnknownValue(serde_json::Value),
34}
35
36#[derive(Debug, Clone, Serialize, Deserialize)]
38#[serde(untagged)]
39pub enum DeleteRelationshipsError {
40 Status400(models::ErrorGeneric),
41 DefaultResponse(models::ErrorGeneric),
42 UnknownValue(serde_json::Value),
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize)]
47#[serde(untagged)]
48pub enum GetRelationshipsError {
49 Status404(models::ErrorGeneric),
50 DefaultResponse(models::ErrorGeneric),
51 UnknownValue(serde_json::Value),
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(untagged)]
57pub enum ListRelationshipNamespacesError {
58 DefaultResponse(models::ErrorGeneric),
59 UnknownValue(serde_json::Value),
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize)]
64#[serde(untagged)]
65pub enum PatchRelationshipsError {
66 Status400(models::ErrorGeneric),
67 Status404(models::ErrorGeneric),
68 DefaultResponse(models::ErrorGeneric),
69 UnknownValue(serde_json::Value),
70}
71
72
73pub async fn check_opl_syntax(configuration: &configuration::Configuration, body: Option<&str>) -> Result<models::CheckOplSyntaxResult, Error<CheckOplSyntaxError>> {
75 let p_body = body;
77
78 let uri_str = format!("{}/opl/syntax/check", configuration.base_path);
79 let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
80
81 if let Some(ref user_agent) = configuration.user_agent {
82 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
83 }
84 if let Some(ref token) = configuration.bearer_access_token {
85 req_builder = req_builder.bearer_auth(token.to_owned());
86 };
87 req_builder = req_builder.json(&p_body);
88
89 let req = req_builder.build()?;
90 let resp = configuration.client.execute(req).await?;
91
92 let status = resp.status();
93 let content_type = resp
94 .headers()
95 .get("content-type")
96 .and_then(|v| v.to_str().ok())
97 .unwrap_or("application/octet-stream");
98 let content_type = super::ContentType::from(content_type);
99
100 if !status.is_client_error() && !status.is_server_error() {
101 let content = resp.text().await?;
102 match content_type {
103 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
104 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::CheckOplSyntaxResult`"))),
105 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::CheckOplSyntaxResult`")))),
106 }
107 } else {
108 let content = resp.text().await?;
109 let entity: Option<CheckOplSyntaxError> = serde_json::from_str(&content).ok();
110 Err(Error::ResponseError(ResponseContent { status, content, entity }))
111 }
112}
113
114pub async fn create_relationship(configuration: &configuration::Configuration, create_relationship_body: Option<models::CreateRelationshipBody>) -> Result<models::Relationship, Error<CreateRelationshipError>> {
116 let p_create_relationship_body = create_relationship_body;
118
119 let uri_str = format!("{}/admin/relation-tuples", configuration.base_path);
120 let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
121
122 if let Some(ref user_agent) = configuration.user_agent {
123 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
124 }
125 if let Some(ref token) = configuration.bearer_access_token {
126 req_builder = req_builder.bearer_auth(token.to_owned());
127 };
128 req_builder = req_builder.json(&p_create_relationship_body);
129
130 let req = req_builder.build()?;
131 let resp = configuration.client.execute(req).await?;
132
133 let status = resp.status();
134 let content_type = resp
135 .headers()
136 .get("content-type")
137 .and_then(|v| v.to_str().ok())
138 .unwrap_or("application/octet-stream");
139 let content_type = super::ContentType::from(content_type);
140
141 if !status.is_client_error() && !status.is_server_error() {
142 let content = resp.text().await?;
143 match content_type {
144 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
145 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Relationship`"))),
146 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Relationship`")))),
147 }
148 } else {
149 let content = resp.text().await?;
150 let entity: Option<CreateRelationshipError> = serde_json::from_str(&content).ok();
151 Err(Error::ResponseError(ResponseContent { status, content, entity }))
152 }
153}
154
155pub async fn delete_relationships(configuration: &configuration::Configuration, namespace: Option<&str>, object: Option<&str>, relation: Option<&str>, subject_id: Option<&str>, subject_set_period_namespace: Option<&str>, subject_set_period_object: Option<&str>, subject_set_period_relation: Option<&str>) -> Result<(), Error<DeleteRelationshipsError>> {
157 let p_namespace = namespace;
159 let p_object = object;
160 let p_relation = relation;
161 let p_subject_id = subject_id;
162 let p_subject_set_period_namespace = subject_set_period_namespace;
163 let p_subject_set_period_object = subject_set_period_object;
164 let p_subject_set_period_relation = subject_set_period_relation;
165
166 let uri_str = format!("{}/admin/relation-tuples", configuration.base_path);
167 let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
168
169 if let Some(ref param_value) = p_namespace {
170 req_builder = req_builder.query(&[("namespace", ¶m_value.to_string())]);
171 }
172 if let Some(ref param_value) = p_object {
173 req_builder = req_builder.query(&[("object", ¶m_value.to_string())]);
174 }
175 if let Some(ref param_value) = p_relation {
176 req_builder = req_builder.query(&[("relation", ¶m_value.to_string())]);
177 }
178 if let Some(ref param_value) = p_subject_id {
179 req_builder = req_builder.query(&[("subject_id", ¶m_value.to_string())]);
180 }
181 if let Some(ref param_value) = p_subject_set_period_namespace {
182 req_builder = req_builder.query(&[("subject_set.namespace", ¶m_value.to_string())]);
183 }
184 if let Some(ref param_value) = p_subject_set_period_object {
185 req_builder = req_builder.query(&[("subject_set.object", ¶m_value.to_string())]);
186 }
187 if let Some(ref param_value) = p_subject_set_period_relation {
188 req_builder = req_builder.query(&[("subject_set.relation", ¶m_value.to_string())]);
189 }
190 if let Some(ref user_agent) = configuration.user_agent {
191 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
192 }
193 if let Some(ref token) = configuration.bearer_access_token {
194 req_builder = req_builder.bearer_auth(token.to_owned());
195 };
196
197 let req = req_builder.build()?;
198 let resp = configuration.client.execute(req).await?;
199
200 let status = resp.status();
201
202 if !status.is_client_error() && !status.is_server_error() {
203 Ok(())
204 } else {
205 let content = resp.text().await?;
206 let entity: Option<DeleteRelationshipsError> = serde_json::from_str(&content).ok();
207 Err(Error::ResponseError(ResponseContent { status, content, entity }))
208 }
209}
210
211pub async fn get_relationships(configuration: &configuration::Configuration, page_size: Option<i64>, page_token: Option<&str>, namespace: Option<&str>, object: Option<&str>, relation: Option<&str>, subject_id: Option<&str>, subject_set_period_namespace: Option<&str>, subject_set_period_object: Option<&str>, subject_set_period_relation: Option<&str>) -> Result<models::Relationships, Error<GetRelationshipsError>> {
213 let p_page_size = page_size;
215 let p_page_token = page_token;
216 let p_namespace = namespace;
217 let p_object = object;
218 let p_relation = relation;
219 let p_subject_id = subject_id;
220 let p_subject_set_period_namespace = subject_set_period_namespace;
221 let p_subject_set_period_object = subject_set_period_object;
222 let p_subject_set_period_relation = subject_set_period_relation;
223
224 let uri_str = format!("{}/relation-tuples", configuration.base_path);
225 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
226
227 if let Some(ref param_value) = p_page_size {
228 req_builder = req_builder.query(&[("page_size", ¶m_value.to_string())]);
229 }
230 if let Some(ref param_value) = p_page_token {
231 req_builder = req_builder.query(&[("page_token", ¶m_value.to_string())]);
232 }
233 if let Some(ref param_value) = p_namespace {
234 req_builder = req_builder.query(&[("namespace", ¶m_value.to_string())]);
235 }
236 if let Some(ref param_value) = p_object {
237 req_builder = req_builder.query(&[("object", ¶m_value.to_string())]);
238 }
239 if let Some(ref param_value) = p_relation {
240 req_builder = req_builder.query(&[("relation", ¶m_value.to_string())]);
241 }
242 if let Some(ref param_value) = p_subject_id {
243 req_builder = req_builder.query(&[("subject_id", ¶m_value.to_string())]);
244 }
245 if let Some(ref param_value) = p_subject_set_period_namespace {
246 req_builder = req_builder.query(&[("subject_set.namespace", ¶m_value.to_string())]);
247 }
248 if let Some(ref param_value) = p_subject_set_period_object {
249 req_builder = req_builder.query(&[("subject_set.object", ¶m_value.to_string())]);
250 }
251 if let Some(ref param_value) = p_subject_set_period_relation {
252 req_builder = req_builder.query(&[("subject_set.relation", ¶m_value.to_string())]);
253 }
254 if let Some(ref user_agent) = configuration.user_agent {
255 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
256 }
257 if let Some(ref token) = configuration.bearer_access_token {
258 req_builder = req_builder.bearer_auth(token.to_owned());
259 };
260
261 let req = req_builder.build()?;
262 let resp = configuration.client.execute(req).await?;
263
264 let status = resp.status();
265 let content_type = resp
266 .headers()
267 .get("content-type")
268 .and_then(|v| v.to_str().ok())
269 .unwrap_or("application/octet-stream");
270 let content_type = super::ContentType::from(content_type);
271
272 if !status.is_client_error() && !status.is_server_error() {
273 let content = resp.text().await?;
274 match content_type {
275 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
276 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Relationships`"))),
277 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Relationships`")))),
278 }
279 } else {
280 let content = resp.text().await?;
281 let entity: Option<GetRelationshipsError> = serde_json::from_str(&content).ok();
282 Err(Error::ResponseError(ResponseContent { status, content, entity }))
283 }
284}
285
286pub async fn list_relationship_namespaces(configuration: &configuration::Configuration, ) -> Result<models::RelationshipNamespaces, Error<ListRelationshipNamespacesError>> {
288
289 let uri_str = format!("{}/namespaces", configuration.base_path);
290 let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
291
292 if let Some(ref user_agent) = configuration.user_agent {
293 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
294 }
295 if let Some(ref token) = configuration.bearer_access_token {
296 req_builder = req_builder.bearer_auth(token.to_owned());
297 };
298
299 let req = req_builder.build()?;
300 let resp = configuration.client.execute(req).await?;
301
302 let status = resp.status();
303 let content_type = resp
304 .headers()
305 .get("content-type")
306 .and_then(|v| v.to_str().ok())
307 .unwrap_or("application/octet-stream");
308 let content_type = super::ContentType::from(content_type);
309
310 if !status.is_client_error() && !status.is_server_error() {
311 let content = resp.text().await?;
312 match content_type {
313 ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
314 ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::RelationshipNamespaces`"))),
315 ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::RelationshipNamespaces`")))),
316 }
317 } else {
318 let content = resp.text().await?;
319 let entity: Option<ListRelationshipNamespacesError> = serde_json::from_str(&content).ok();
320 Err(Error::ResponseError(ResponseContent { status, content, entity }))
321 }
322}
323
324pub async fn patch_relationships(configuration: &configuration::Configuration, relationship_patch: Option<Vec<models::RelationshipPatch>>) -> Result<(), Error<PatchRelationshipsError>> {
326 let p_relationship_patch = relationship_patch;
328
329 let uri_str = format!("{}/admin/relation-tuples", configuration.base_path);
330 let mut req_builder = configuration.client.request(reqwest::Method::PATCH, &uri_str);
331
332 if let Some(ref user_agent) = configuration.user_agent {
333 req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
334 }
335 if let Some(ref token) = configuration.bearer_access_token {
336 req_builder = req_builder.bearer_auth(token.to_owned());
337 };
338 req_builder = req_builder.json(&p_relationship_patch);
339
340 let req = req_builder.build()?;
341 let resp = configuration.client.execute(req).await?;
342
343 let status = resp.status();
344
345 if !status.is_client_error() && !status.is_server_error() {
346 Ok(())
347 } else {
348 let content = resp.text().await?;
349 let entity: Option<PatchRelationshipsError> = serde_json::from_str(&content).ok();
350 Err(Error::ResponseError(ResponseContent { status, content, entity }))
351 }
352}
353