ory_client/apis/
relationship_api.rs

1/*
2 * Ory APIs
3 *
4 * # Introduction Documentation for all public and administrative Ory APIs. Administrative APIs can only be accessed with a valid Personal Access Token. Public APIs are mostly used in browsers.  ## SDKs This document describes the APIs available in the Ory Network. The APIs are available as SDKs for the following languages:  | Language       | Download SDK                                                     | Documentation                                                                        | | -------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------ | | Dart           | [pub.dev](https://pub.dev/packages/ory_client)                   | [README](https://github.com/ory/sdk/blob/master/clients/client/dart/README.md)       | | .NET           | [nuget.org](https://www.nuget.org/packages/Ory.Client/)          | [README](https://github.com/ory/sdk/blob/master/clients/client/dotnet/README.md)     | | Elixir         | [hex.pm](https://hex.pm/packages/ory_client)                     | [README](https://github.com/ory/sdk/blob/master/clients/client/elixir/README.md)     | | Go             | [github.com](https://github.com/ory/client-go)                   | [README](https://github.com/ory/sdk/blob/master/clients/client/go/README.md)         | | Java           | [maven.org](https://search.maven.org/artifact/sh.ory/ory-client) | [README](https://github.com/ory/sdk/blob/master/clients/client/java/README.md)       | | JavaScript     | [npmjs.com](https://www.npmjs.com/package/@ory/client)           | [README](https://github.com/ory/sdk/blob/master/clients/client/typescript/README.md) | | JavaScript (With fetch) | [npmjs.com](https://www.npmjs.com/package/@ory/client-fetch)           | [README](https://github.com/ory/sdk/blob/master/clients/client/typescript-fetch/README.md) |  | PHP            | [packagist.org](https://packagist.org/packages/ory/client)       | [README](https://github.com/ory/sdk/blob/master/clients/client/php/README.md)        | | Python         | [pypi.org](https://pypi.org/project/ory-client/)                 | [README](https://github.com/ory/sdk/blob/master/clients/client/python/README.md)     | | Ruby           | [rubygems.org](https://rubygems.org/gems/ory-client)             | [README](https://github.com/ory/sdk/blob/master/clients/client/ruby/README.md)       | | Rust           | [crates.io](https://crates.io/crates/ory-client)                 | [README](https://github.com/ory/sdk/blob/master/clients/client/rust/README.md)       | 
5 *
6 * The version of the OpenAPI document: v1.22.4
7 * Contact: support@ory.sh
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize, de::Error as _};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration, ContentType};
16
17
18/// struct for typed errors of method [`check_opl_syntax`]
19#[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/// struct for typed errors of method [`create_relationship`]
28#[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/// struct for typed errors of method [`delete_relationships`]
37#[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/// struct for typed errors of method [`get_relationships`]
46#[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/// struct for typed errors of method [`list_relationship_namespaces`]
55#[derive(Debug, Clone, Serialize, Deserialize)]
56#[serde(untagged)]
57pub enum ListRelationshipNamespacesError {
58    DefaultResponse(models::ErrorGeneric),
59    UnknownValue(serde_json::Value),
60}
61
62/// struct for typed errors of method [`patch_relationships`]
63#[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
73/// The OPL file is expected in the body of the request.
74pub async fn check_opl_syntax(configuration: &configuration::Configuration, body: Option<&str>) -> Result<models::CheckOplSyntaxResult, Error<CheckOplSyntaxError>> {
75    // add a prefix to parameters to efficiently prevent name collisions
76    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
114/// Use this endpoint to create a relationship.
115pub async fn create_relationship(configuration: &configuration::Configuration, create_relationship_body: Option<models::CreateRelationshipBody>) -> Result<models::Relationship, Error<CreateRelationshipError>> {
116    // add a prefix to parameters to efficiently prevent name collisions
117    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
155/// Use this endpoint to delete relationships
156pub 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    // add a prefix to parameters to efficiently prevent name collisions
158    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", &param_value.to_string())]);
171    }
172    if let Some(ref param_value) = p_object {
173        req_builder = req_builder.query(&[("object", &param_value.to_string())]);
174    }
175    if let Some(ref param_value) = p_relation {
176        req_builder = req_builder.query(&[("relation", &param_value.to_string())]);
177    }
178    if let Some(ref param_value) = p_subject_id {
179        req_builder = req_builder.query(&[("subject_id", &param_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", &param_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", &param_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", &param_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
211/// Get all relationships that match the query. Only the namespace field is required.
212pub 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    // add a prefix to parameters to efficiently prevent name collisions
214    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", &param_value.to_string())]);
229    }
230    if let Some(ref param_value) = p_page_token {
231        req_builder = req_builder.query(&[("page_token", &param_value.to_string())]);
232    }
233    if let Some(ref param_value) = p_namespace {
234        req_builder = req_builder.query(&[("namespace", &param_value.to_string())]);
235    }
236    if let Some(ref param_value) = p_object {
237        req_builder = req_builder.query(&[("object", &param_value.to_string())]);
238    }
239    if let Some(ref param_value) = p_relation {
240        req_builder = req_builder.query(&[("relation", &param_value.to_string())]);
241    }
242    if let Some(ref param_value) = p_subject_id {
243        req_builder = req_builder.query(&[("subject_id", &param_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", &param_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", &param_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", &param_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
286/// Get all namespaces
287pub 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
324/// Use this endpoint to patch one or more relationships.
325pub async fn patch_relationships(configuration: &configuration::Configuration, relationship_patch: Option<Vec<models::RelationshipPatch>>) -> Result<(), Error<PatchRelationshipsError>> {
326    // add a prefix to parameters to efficiently prevent name collisions
327    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