1use super::types::*;
2use crate::client::{AuthType, Client};
3use crate::error::ApiResult;
4
5pub trait FieldApi {
6 fn list_fields(
13 &self,
14 project_key: &str,
15 request: ListFieldsRequest,
16 auth: AuthType,
17 ) -> impl std::future::Future<Output = ApiResult<ListFieldsResponse>> + Send;
18
19 fn create_field(
27 &self,
28 project_key: &str,
29 work_item_type_key: &str,
30 request: CreateFieldRequest,
31 auth: AuthType,
32 ) -> impl std::future::Future<Output = ApiResult<CreateFieldResponse>> + Send;
33
34 fn update_field(
42 &self,
43 project_key: &str,
44 work_item_type_key: &str,
45 request: UpdateFieldRequest,
46 auth: AuthType,
47 ) -> impl std::future::Future<Output = ApiResult<UpdateFieldResponse>> + Send;
48}
49
50impl FieldApi for Client {
51 async fn list_fields(
52 &self,
53 project_key: &str,
54 request: ListFieldsRequest,
55 auth: AuthType,
56 ) -> ApiResult<ListFieldsResponse> {
57 Ok(self
58 .post(&format!("{}/field/all", project_key), request, auth)
59 .await?)
60 }
61
62 async fn create_field(
63 &self,
64 project_key: &str,
65 work_item_type_key: &str,
66 request: CreateFieldRequest,
67 auth: AuthType,
68 ) -> ApiResult<CreateFieldResponse> {
69 Ok(self
70 .post(
71 &format!("{}/field/{}/create", project_key, work_item_type_key),
72 request,
73 auth,
74 )
75 .await?)
76 }
77
78 async fn update_field(
79 &self,
80 project_key: &str,
81 work_item_type_key: &str,
82 request: UpdateFieldRequest,
83 auth: AuthType,
84 ) -> ApiResult<UpdateFieldResponse> {
85 Ok(self
86 .put(
87 &format!("{}/field/{}", project_key, work_item_type_key),
88 request,
89 auth,
90 )
91 .await?)
92 }
93}