Skip to main content

atlassian_rust_api/jira/endpoints/permissions/
get_permissions.rs

1use std::sync::Arc;
2
3use crate::{Result, rest_client::RestClient, web::{Endpoint, QueryParams}};
4use crate::Jira;
5
6#[derive(Debug, Clone)]
7pub struct GetPermissionsBuilder {
8	client: Arc<RestClient>,
9	request: GetPermissionsRequest,
10}
11
12#[derive(Debug, Clone, Default)]
13struct GetPermissionsRequest {
14	permissions: Vec<String>,
15	project_id: Option<u32>,
16	project_key: Option<String>,
17	issue_id: Option<u32>,
18	issue_key: Option<String>,
19}
20
21impl Endpoint for GetPermissionsRequest {
22	fn endpoint(&self) -> std::borrow::Cow<'static, str> {
23		"mypermissions".into()
24	}
25
26	fn parameters(&self) -> crate::web::QueryParams<'_> {
27		let mut params = QueryParams::default();
28		params
29			.push("permissions", self.permissions.join(","))
30			.push_opt("projectId", self.project_id)
31			.push_opt("projectKey", self.project_key.as_ref())
32			.push_opt("issueId", self.issue_id)
33			.push_opt("issueKey", self.issue_key.as_ref());
34		params
35	}
36}
37
38impl GetPermissionsBuilder {
39	fn new(client: Arc<RestClient>) -> GetPermissionsBuilder {
40		GetPermissionsBuilder { client, request: GetPermissionsRequest::default() }
41	}
42
43	/// Add a single permission to the request
44	pub fn permission(mut self, permission: impl Into<String>) -> GetPermissionsBuilder {
45		self.request.permissions.push(permission.into());
46		self
47	}
48
49	/// Add multiple permissions to the request
50	pub fn permissions(mut self, permissions: Vec<impl Into<String>>) -> GetPermissionsBuilder {
51		let permissions = permissions.into_iter().map(|p| p.into()).collect::<Vec<String>>();
52		self.request.permissions.extend(permissions);
53		self
54	}
55
56	pub fn project_id(mut self, project_id: u32) -> GetPermissionsBuilder {
57		self.request.project_id = Some(project_id);
58		self
59	}
60
61	pub fn project_key(mut self, project_key: impl Into<String>) -> GetPermissionsBuilder {
62		self.request.project_key = Some(project_key.into());
63		self
64	}
65
66	pub fn issue_id(mut self, issue_id: u32) -> GetPermissionsBuilder {
67		self.request.issue_id = Some(issue_id);
68		self
69	}
70
71	pub fn issue_key(mut self, issue_key: impl Into<String>) -> GetPermissionsBuilder {
72		self.request.issue_key = Some(issue_key.into());
73		self
74	}
75
76	pub async fn send(self) -> Result<serde_json::Value> {
77		self.client.get(self.request).await
78	}
79}
80
81// Impl Jira
82impl Jira {
83	/// Returns a list of permissions indicating which permissions the user has. Details of the user's permissions can
84	/// be obtained in a global, project, issue, or comment context.
85	pub fn get_permissions(&self) -> GetPermissionsBuilder {
86		GetPermissionsBuilder::new(Arc::clone(&self.client))
87	}
88}