jira_api_v2/apis/
project_roles_api.rs

1/*
2 * The Jira Cloud platform REST API
3 *
4 * Jira Cloud platform REST API documentation
5 *
6 * The version of the OpenAPI document: 1001.0.0-SNAPSHOT
7 * Contact: ecosystem@atlassian.com
8 * Generated by: https://openapi-generator.tech
9 */
10
11
12use reqwest;
13use serde::{Deserialize, Serialize};
14use crate::{apis::ResponseContent, models};
15use super::{Error, configuration};
16
17
18/// struct for typed errors of method [`create_project_role`]
19#[derive(Debug, Clone, Serialize, Deserialize)]
20#[serde(untagged)]
21pub enum CreateProjectRoleError {
22    Status400(),
23    Status401(),
24    Status403(),
25    Status409(),
26    UnknownValue(serde_json::Value),
27}
28
29/// struct for typed errors of method [`delete_project_role`]
30#[derive(Debug, Clone, Serialize, Deserialize)]
31#[serde(untagged)]
32pub enum DeleteProjectRoleError {
33    Status400(),
34    Status401(),
35    Status403(),
36    Status404(),
37    Status409(),
38    UnknownValue(serde_json::Value),
39}
40
41/// struct for typed errors of method [`fully_update_project_role`]
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(untagged)]
44pub enum FullyUpdateProjectRoleError {
45    Status400(),
46    Status401(),
47    Status403(),
48    Status404(),
49    UnknownValue(serde_json::Value),
50}
51
52/// struct for typed errors of method [`get_all_project_roles`]
53#[derive(Debug, Clone, Serialize, Deserialize)]
54#[serde(untagged)]
55pub enum GetAllProjectRolesError {
56    Status401(),
57    Status403(),
58    UnknownValue(serde_json::Value),
59}
60
61/// struct for typed errors of method [`get_project_role`]
62#[derive(Debug, Clone, Serialize, Deserialize)]
63#[serde(untagged)]
64pub enum GetProjectRoleError {
65    Status400(),
66    Status401(),
67    Status404(),
68    UnknownValue(serde_json::Value),
69}
70
71/// struct for typed errors of method [`get_project_role_by_id`]
72#[derive(Debug, Clone, Serialize, Deserialize)]
73#[serde(untagged)]
74pub enum GetProjectRoleByIdError {
75    Status401(),
76    Status403(),
77    Status404(),
78    UnknownValue(serde_json::Value),
79}
80
81/// struct for typed errors of method [`get_project_role_details`]
82#[derive(Debug, Clone, Serialize, Deserialize)]
83#[serde(untagged)]
84pub enum GetProjectRoleDetailsError {
85    Status401(),
86    Status404(),
87    UnknownValue(serde_json::Value),
88}
89
90/// struct for typed errors of method [`get_project_roles`]
91#[derive(Debug, Clone, Serialize, Deserialize)]
92#[serde(untagged)]
93pub enum GetProjectRolesError {
94    Status401(),
95    Status404(),
96    UnknownValue(serde_json::Value),
97}
98
99/// struct for typed errors of method [`partial_update_project_role`]
100#[derive(Debug, Clone, Serialize, Deserialize)]
101#[serde(untagged)]
102pub enum PartialUpdateProjectRoleError {
103    Status400(),
104    Status401(),
105    Status403(),
106    Status404(),
107    UnknownValue(serde_json::Value),
108}
109
110
111/// Creates a new project role with no [default actors](#api-rest-api-2-resolution-get). You can use the [Add default actors to project role](#api-rest-api-2-role-id-actors-post) operation to add default actors to the project role after creating it.  *Note that although a new project role is available to all projects upon creation, any default actors that are associated with the project role are not added to projects that existed prior to the role being created.*<  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
112pub async fn create_project_role(configuration: &configuration::Configuration, create_update_role_request_bean: models::CreateUpdateRoleRequestBean) -> Result<models::ProjectRole, Error<CreateProjectRoleError>> {
113    // add a prefix to parameters to efficiently prevent name collisions
114    let p_create_update_role_request_bean = create_update_role_request_bean;
115
116    let uri_str = format!("{}/rest/api/2/role", configuration.base_path);
117    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
118
119    if let Some(ref user_agent) = configuration.user_agent {
120        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
121    }
122    if let Some(ref token) = configuration.oauth_access_token {
123        req_builder = req_builder.bearer_auth(token.to_owned());
124    };
125    if let Some(ref auth_conf) = configuration.basic_auth {
126        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
127    };
128    req_builder = req_builder.json(&p_create_update_role_request_bean);
129
130    let req = req_builder.build()?;
131    let resp = configuration.client.execute(req).await?;
132
133    let status = resp.status();
134
135    if !status.is_client_error() && !status.is_server_error() {
136        let content = resp.text().await?;
137        serde_json::from_str(&content).map_err(Error::from)
138    } else {
139        let content = resp.text().await?;
140        let entity: Option<CreateProjectRoleError> = serde_json::from_str(&content).ok();
141        Err(Error::ResponseError(ResponseContent { status, content, entity }))
142    }
143}
144
145/// Deletes a project role. You must specify a replacement project role if you wish to delete a project role that is in use.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
146pub async fn delete_project_role(configuration: &configuration::Configuration, id: i64, swap: Option<i64>) -> Result<(), Error<DeleteProjectRoleError>> {
147    // add a prefix to parameters to efficiently prevent name collisions
148    let p_id = id;
149    let p_swap = swap;
150
151    let uri_str = format!("{}/rest/api/2/role/{id}", configuration.base_path, id=p_id);
152    let mut req_builder = configuration.client.request(reqwest::Method::DELETE, &uri_str);
153
154    if let Some(ref param_value) = p_swap {
155        req_builder = req_builder.query(&[("swap", &param_value.to_string())]);
156    }
157    if let Some(ref user_agent) = configuration.user_agent {
158        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
159    }
160    if let Some(ref token) = configuration.oauth_access_token {
161        req_builder = req_builder.bearer_auth(token.to_owned());
162    };
163    if let Some(ref auth_conf) = configuration.basic_auth {
164        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
165    };
166
167    let req = req_builder.build()?;
168    let resp = configuration.client.execute(req).await?;
169
170    let status = resp.status();
171
172    if !status.is_client_error() && !status.is_server_error() {
173        Ok(())
174    } else {
175        let content = resp.text().await?;
176        let entity: Option<DeleteProjectRoleError> = serde_json::from_str(&content).ok();
177        Err(Error::ResponseError(ResponseContent { status, content, entity }))
178    }
179}
180
181/// Updates the project role's name and description. You must include both a name and a description in the request.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
182pub async fn fully_update_project_role(configuration: &configuration::Configuration, id: i64, create_update_role_request_bean: models::CreateUpdateRoleRequestBean) -> Result<models::ProjectRole, Error<FullyUpdateProjectRoleError>> {
183    // add a prefix to parameters to efficiently prevent name collisions
184    let p_id = id;
185    let p_create_update_role_request_bean = create_update_role_request_bean;
186
187    let uri_str = format!("{}/rest/api/2/role/{id}", configuration.base_path, id=p_id);
188    let mut req_builder = configuration.client.request(reqwest::Method::PUT, &uri_str);
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.oauth_access_token {
194        req_builder = req_builder.bearer_auth(token.to_owned());
195    };
196    if let Some(ref auth_conf) = configuration.basic_auth {
197        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
198    };
199    req_builder = req_builder.json(&p_create_update_role_request_bean);
200
201    let req = req_builder.build()?;
202    let resp = configuration.client.execute(req).await?;
203
204    let status = resp.status();
205
206    if !status.is_client_error() && !status.is_server_error() {
207        let content = resp.text().await?;
208        serde_json::from_str(&content).map_err(Error::from)
209    } else {
210        let content = resp.text().await?;
211        let entity: Option<FullyUpdateProjectRoleError> = serde_json::from_str(&content).ok();
212        Err(Error::ResponseError(ResponseContent { status, content, entity }))
213    }
214}
215
216/// Gets a list of all project roles, complete with project role details and default actors.  ### About project roles ###  [Project roles](https://confluence.atlassian.com/x/3odKLg) are a flexible way to to associate users and groups with projects. In Jira Cloud, the list of project roles is shared globally with all projects, but each project can have a different set of actors associated with it (unlike groups, which have the same membership throughout all Jira applications).  Project roles are used in [permission schemes](#api-rest-api-2-permissionscheme-get), [email notification schemes](#api-rest-api-2-notificationscheme-get), [issue security levels](#api-rest-api-2-issuesecurityschemes-get), [comment visibility](#api-rest-api-2-comment-list-post), and workflow conditions.  #### Members and actors ####  In the Jira REST API, a member of a project role is called an *actor*. An *actor* is a group or user associated with a project role.  Actors may be set as [default members](https://confluence.atlassian.com/x/3odKLg#Managingprojectroles-Specifying'defaultmembers'foraprojectrole) of the project role or set at the project level:   *  Default actors: Users and groups that are assigned to the project role for all newly created projects. The default actors can be removed at the project level later if desired.  *  Actors: Users and groups that are associated with a project role for a project, which may differ from the default actors. This enables you to assign a user to different roles in different projects.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
217pub async fn get_all_project_roles(configuration: &configuration::Configuration, ) -> Result<Vec<models::ProjectRole>, Error<GetAllProjectRolesError>> {
218
219    let uri_str = format!("{}/rest/api/2/role", configuration.base_path);
220    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
221
222    if let Some(ref user_agent) = configuration.user_agent {
223        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
224    }
225    if let Some(ref token) = configuration.oauth_access_token {
226        req_builder = req_builder.bearer_auth(token.to_owned());
227    };
228    if let Some(ref auth_conf) = configuration.basic_auth {
229        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
230    };
231
232    let req = req_builder.build()?;
233    let resp = configuration.client.execute(req).await?;
234
235    let status = resp.status();
236
237    if !status.is_client_error() && !status.is_server_error() {
238        let content = resp.text().await?;
239        serde_json::from_str(&content).map_err(Error::from)
240    } else {
241        let content = resp.text().await?;
242        let entity: Option<GetAllProjectRolesError> = serde_json::from_str(&content).ok();
243        Err(Error::ResponseError(ResponseContent { status, content, entity }))
244    }
245}
246
247/// Returns a project role's details and actors associated with the project. The list of actors is sorted by display name.  To check whether a user belongs to a role based on their group memberships, use [Get user](#api-rest-api-2-user-get) with the `groups` expand parameter selected. Then check whether the user keys and groups match with the actors returned for the project.  This operation can be accessed anonymously.  **[Permissions](#permissions) required:** *Administer Projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project or *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
248pub async fn get_project_role(configuration: &configuration::Configuration, project_id_or_key: &str, id: i64) -> Result<models::ProjectRole, Error<GetProjectRoleError>> {
249    // add a prefix to parameters to efficiently prevent name collisions
250    let p_project_id_or_key = project_id_or_key;
251    let p_id = id;
252
253    let uri_str = format!("{}/rest/api/2/project/{projectIdOrKey}/role/{id}", configuration.base_path, projectIdOrKey=crate::apis::urlencode(p_project_id_or_key), id=p_id);
254    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
255
256    if let Some(ref user_agent) = configuration.user_agent {
257        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
258    }
259    if let Some(ref token) = configuration.oauth_access_token {
260        req_builder = req_builder.bearer_auth(token.to_owned());
261    };
262    if let Some(ref auth_conf) = configuration.basic_auth {
263        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
264    };
265
266    let req = req_builder.build()?;
267    let resp = configuration.client.execute(req).await?;
268
269    let status = resp.status();
270
271    if !status.is_client_error() && !status.is_server_error() {
272        let content = resp.text().await?;
273        serde_json::from_str(&content).map_err(Error::from)
274    } else {
275        let content = resp.text().await?;
276        let entity: Option<GetProjectRoleError> = serde_json::from_str(&content).ok();
277        Err(Error::ResponseError(ResponseContent { status, content, entity }))
278    }
279}
280
281/// Gets the project role details and the default actors associated with the role. The list of default actors is sorted by display name.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
282pub async fn get_project_role_by_id(configuration: &configuration::Configuration, id: i64) -> Result<models::ProjectRole, Error<GetProjectRoleByIdError>> {
283    // add a prefix to parameters to efficiently prevent name collisions
284    let p_id = id;
285
286    let uri_str = format!("{}/rest/api/2/role/{id}", configuration.base_path, id=p_id);
287    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
288
289    if let Some(ref user_agent) = configuration.user_agent {
290        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
291    }
292    if let Some(ref token) = configuration.oauth_access_token {
293        req_builder = req_builder.bearer_auth(token.to_owned());
294    };
295    if let Some(ref auth_conf) = configuration.basic_auth {
296        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.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
304    if !status.is_client_error() && !status.is_server_error() {
305        let content = resp.text().await?;
306        serde_json::from_str(&content).map_err(Error::from)
307    } else {
308        let content = resp.text().await?;
309        let entity: Option<GetProjectRoleByIdError> = serde_json::from_str(&content).ok();
310        Err(Error::ResponseError(ResponseContent { status, content, entity }))
311    }
312}
313
314/// Returns all [project roles](https://confluence.atlassian.com/x/3odKLg) and the details for each role. Note that the list of project roles is common to all projects.  This operation can be accessed anonymously.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg) or *Administer projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for the project.
315pub async fn get_project_role_details(configuration: &configuration::Configuration, project_id_or_key: &str, current_member: Option<bool>, exclude_connect_addons: Option<bool>) -> Result<Vec<models::ProjectRoleDetails>, Error<GetProjectRoleDetailsError>> {
316    // add a prefix to parameters to efficiently prevent name collisions
317    let p_project_id_or_key = project_id_or_key;
318    let p_current_member = current_member;
319    let p_exclude_connect_addons = exclude_connect_addons;
320
321    let uri_str = format!("{}/rest/api/2/project/{projectIdOrKey}/roledetails", configuration.base_path, projectIdOrKey=crate::apis::urlencode(p_project_id_or_key));
322    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
323
324    if let Some(ref param_value) = p_current_member {
325        req_builder = req_builder.query(&[("currentMember", &param_value.to_string())]);
326    }
327    if let Some(ref param_value) = p_exclude_connect_addons {
328        req_builder = req_builder.query(&[("excludeConnectAddons", &param_value.to_string())]);
329    }
330    if let Some(ref user_agent) = configuration.user_agent {
331        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
332    }
333    if let Some(ref token) = configuration.oauth_access_token {
334        req_builder = req_builder.bearer_auth(token.to_owned());
335    };
336    if let Some(ref auth_conf) = configuration.basic_auth {
337        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
338    };
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        let content = resp.text().await?;
347        serde_json::from_str(&content).map_err(Error::from)
348    } else {
349        let content = resp.text().await?;
350        let entity: Option<GetProjectRoleDetailsError> = serde_json::from_str(&content).ok();
351        Err(Error::ResponseError(ResponseContent { status, content, entity }))
352    }
353}
354
355/// Returns a list of [project roles](https://confluence.atlassian.com/x/3odKLg) for the project returning the name and self URL for each role.  Note that all project roles are shared with all projects in Jira Cloud. See [Get all project roles](#api-rest-api-2-role-get) for more information.  This operation can be accessed anonymously.  **[Permissions](#permissions) required:** *Administer Projects* [project permission](https://confluence.atlassian.com/x/yodKLg) for any project on the site or *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
356pub async fn get_project_roles(configuration: &configuration::Configuration, project_id_or_key: &str) -> Result<std::collections::HashMap<String, String>, Error<GetProjectRolesError>> {
357    // add a prefix to parameters to efficiently prevent name collisions
358    let p_project_id_or_key = project_id_or_key;
359
360    let uri_str = format!("{}/rest/api/2/project/{projectIdOrKey}/role", configuration.base_path, projectIdOrKey=crate::apis::urlencode(p_project_id_or_key));
361    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
362
363    if let Some(ref user_agent) = configuration.user_agent {
364        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
365    }
366    if let Some(ref token) = configuration.oauth_access_token {
367        req_builder = req_builder.bearer_auth(token.to_owned());
368    };
369    if let Some(ref auth_conf) = configuration.basic_auth {
370        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
371    };
372
373    let req = req_builder.build()?;
374    let resp = configuration.client.execute(req).await?;
375
376    let status = resp.status();
377
378    if !status.is_client_error() && !status.is_server_error() {
379        let content = resp.text().await?;
380        serde_json::from_str(&content).map_err(Error::from)
381    } else {
382        let content = resp.text().await?;
383        let entity: Option<GetProjectRolesError> = serde_json::from_str(&content).ok();
384        Err(Error::ResponseError(ResponseContent { status, content, entity }))
385    }
386}
387
388/// Updates either the project role's name or its description.  You cannot update both the name and description at the same time using this operation. If you send a request with a name and a description only the name is updated.  **[Permissions](#permissions) required:** *Administer Jira* [global permission](https://confluence.atlassian.com/x/x4dKLg).
389pub async fn partial_update_project_role(configuration: &configuration::Configuration, id: i64, create_update_role_request_bean: models::CreateUpdateRoleRequestBean) -> Result<models::ProjectRole, Error<PartialUpdateProjectRoleError>> {
390    // add a prefix to parameters to efficiently prevent name collisions
391    let p_id = id;
392    let p_create_update_role_request_bean = create_update_role_request_bean;
393
394    let uri_str = format!("{}/rest/api/2/role/{id}", configuration.base_path, id=p_id);
395    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
396
397    if let Some(ref user_agent) = configuration.user_agent {
398        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
399    }
400    if let Some(ref token) = configuration.oauth_access_token {
401        req_builder = req_builder.bearer_auth(token.to_owned());
402    };
403    if let Some(ref auth_conf) = configuration.basic_auth {
404        req_builder = req_builder.basic_auth(auth_conf.0.to_owned(), auth_conf.1.to_owned());
405    };
406    req_builder = req_builder.json(&p_create_update_role_request_bean);
407
408    let req = req_builder.build()?;
409    let resp = configuration.client.execute(req).await?;
410
411    let status = resp.status();
412
413    if !status.is_client_error() && !status.is_server_error() {
414        let content = resp.text().await?;
415        serde_json::from_str(&content).map_err(Error::from)
416    } else {
417        let content = resp.text().await?;
418        let entity: Option<PartialUpdateProjectRoleError> = serde_json::from_str(&content).ok();
419        Err(Error::ResponseError(ResponseContent { status, content, entity }))
420    }
421}
422