Skip to main content

atlassian_rust_api/jira/endpoints/fields/
get_custom_fields.rs

1use std::sync::Arc;
2
3use crate::{Jira, Result, rest_client::RestClient, web::{Endpoint, QueryParams}};
4
5#[derive(Debug, Clone)]
6pub struct GetCustomFieldsBuilder {
7	client: Arc<RestClient>,
8	request: GetCustomFieldsRequest,
9}
10
11#[derive(Debug, Clone, Default)]
12struct GetCustomFieldsRequest {
13	search: Option<String>,
14	start_at: Option<u32>,
15	limit: Option<u32>,
16	// Provided by GetCustomFieldsBuilder
17	cloud: bool
18}
19
20impl Endpoint for GetCustomFieldsRequest {
21	fn endpoint(&self) -> std::borrow::Cow<'static, str> {
22		match self.cloud {
23			true => "field/search".into(),
24			false => "customFields".into(),
25		}
26	}
27	
28	fn parameters(&self) -> QueryParams<'_> {
29		let mut params = QueryParams::default();
30		params
31			.push("startAt", self.start_at.unwrap_or(1))
32			.push("maxResults", self.limit.unwrap_or(50))
33			.push_opt("search", self.search.as_ref());
34		params
35	}
36}
37
38impl GetCustomFieldsBuilder {
39	fn new(client: Arc<RestClient>) -> GetCustomFieldsBuilder {
40		let cloud = client.cloud.clone();
41		GetCustomFieldsBuilder { client, request: GetCustomFieldsRequest { cloud, ..Default::default() } }
42	}
43
44	pub fn search(mut self, search: impl Into<String>) -> GetCustomFieldsBuilder {
45		self.request.search = Some(search.into());
46		self
47	}
48
49	pub fn start_at(mut self, start_at: u32) -> GetCustomFieldsBuilder {
50		self.request.start_at = Some(start_at);
51		self
52	}
53
54	pub fn limit(mut self, limit: u32) -> GetCustomFieldsBuilder {
55		self.request.limit = Some(limit);
56		self
57	}
58
59	pub async fn send(self) -> Result<serde_json::Value> {
60		self.client.get(self.request).await
61	}
62}
63
64impl Jira {
65	/// Get custom fields
66	pub fn get_custom_fields(&self) -> GetCustomFieldsBuilder {
67		GetCustomFieldsBuilder::new(Arc::clone(&self.client))
68	}
69}