Skip to main content

atlassian_rust_api/jira/endpoints/avatars/
store_temporary_avatar.rs

1use std::sync::Arc;
2
3use crate::{Jira, Result, rest_client::RestClient, web::{Endpoint, QueryParams}};
4
5#[derive(Debug, Clone)]
6pub struct StoreTemporaryAvatarBuilder {
7	client: Arc<RestClient>,
8	request: StoreTemporaryAvatarRequest,
9}
10
11#[derive(Debug, Clone, Default)]
12struct StoreTemporaryAvatarRequest {
13	avatar_type: String,
14	filename: String,
15	size: u64,
16}
17
18impl Endpoint for StoreTemporaryAvatarRequest {
19	fn endpoint(&self) -> std::borrow::Cow<'static, str> {
20		format!("avatar/{}/temporary", &self.avatar_type).into()
21	}
22
23	fn parameters(&self) -> QueryParams<'_> {
24		let mut params = QueryParams::default();
25		params
26			.push("filename", &self.filename)
27			.push("size", self.size);
28		params
29	}
30}
31
32impl StoreTemporaryAvatarBuilder {
33	fn new(client: Arc<RestClient>) -> StoreTemporaryAvatarBuilder {
34		StoreTemporaryAvatarBuilder { client, request: StoreTemporaryAvatarRequest::default() }
35	}
36
37	fn avatar_type(mut self, avatar_type: impl Into<String>) -> StoreTemporaryAvatarBuilder {
38		self.request.avatar_type = avatar_type.into();
39		self
40	}
41
42	fn filename(mut self, filename: impl Into<String>) -> StoreTemporaryAvatarBuilder {
43		self.request.filename = filename.into();
44		self
45	}
46
47	fn size(mut self, size: u64) -> StoreTemporaryAvatarBuilder {
48		self.request.size = size.into();
49		self
50	}
51
52	pub async fn send(self) -> Result<serde_json::Value> {
53		self.client.post(self.request).await
54	}
55}
56
57impl Jira {
58	/// Creates a temporary avatar and returns cropping instructions
59	pub fn store_temporary_avatar(
60		&self,
61		avatar_type: impl Into<String>,
62		filename: impl Into<String>,
63		size: u64,
64	) -> StoreTemporaryAvatarBuilder {
65		StoreTemporaryAvatarBuilder::new(Arc::clone(&self.client))
66			.avatar_type(avatar_type)
67			.filename(filename)
68			.size(size)
69	}
70}