dynamo_async_openai/
project_service_accounts.rs1use serde::Serialize;
12
13use crate::{
14 Client,
15 config::Config,
16 error::OpenAIError,
17 types::{
18 ProjectServiceAccount, ProjectServiceAccountCreateRequest,
19 ProjectServiceAccountCreateResponse, ProjectServiceAccountDeleteResponse,
20 ProjectServiceAccountListResponse,
21 },
22};
23
24pub struct ProjectServiceAccounts<'c, C: Config> {
29 client: &'c Client<C>,
30 pub project_id: String,
31}
32
33impl<'c, C: Config> ProjectServiceAccounts<'c, C> {
34 pub fn new(client: &'c Client<C>, project_id: &str) -> Self {
35 Self {
36 client,
37 project_id: project_id.into(),
38 }
39 }
40
41 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
43 pub async fn list<Q>(&self, query: &Q) -> Result<ProjectServiceAccountListResponse, OpenAIError>
44 where
45 Q: Serialize + ?Sized,
46 {
47 self.client
48 .get_with_query(
49 format!(
50 "/organization/projects/{}/service_accounts",
51 self.project_id
52 )
53 .as_str(),
54 &query,
55 )
56 .await
57 }
58
59 #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
61 pub async fn create(
62 &self,
63 request: ProjectServiceAccountCreateRequest,
64 ) -> Result<ProjectServiceAccountCreateResponse, OpenAIError> {
65 self.client
66 .post(
67 format!(
68 "/organization/projects/{}/service_accounts",
69 self.project_id
70 )
71 .as_str(),
72 request,
73 )
74 .await
75 }
76
77 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
79 pub async fn retrieve(
80 &self,
81 service_account_id: &str,
82 ) -> Result<ProjectServiceAccount, OpenAIError> {
83 self.client
84 .get(
85 format!(
86 "/organization/projects/{}/service_accounts/{service_account_id}",
87 self.project_id
88 )
89 .as_str(),
90 )
91 .await
92 }
93
94 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
96 pub async fn delete(
97 &self,
98 service_account_id: &str,
99 ) -> Result<ProjectServiceAccountDeleteResponse, OpenAIError> {
100 self.client
101 .delete(
102 format!(
103 "/organization/projects/{}/service_accounts/{service_account_id}",
104 self.project_id
105 )
106 .as_str(),
107 )
108 .await
109 }
110}