vaultrs/identity/
entity.rs

1use std::fmt;
2
3use crate::{
4    api::{
5        self,
6        identity::entity::{
7            requests::{
8                BatchDeleteRequest, CreateEntityByNameRequest, CreateEntityByNameRequestBuilder,
9                CreateEntityRequest, CreateEntityRequestBuilder, DeleteEntityByIdRequest,
10                DeleteEntityByNameRequest, ListEntitiesByIdRequest, ListEntitiesByNameRequest,
11                MergeEntitiesRequest, MergeEntitiesRequestBuilder, ReadEntityByIdRequest,
12                ReadEntityByNameRequest, UpdateEntityByIdRequest, UpdateEntityByIdRequestBuilder,
13            },
14            responses::{
15                CreateEntityResponse, ListEntitiesByIdResponse, ListEntitiesByNameResponse,
16                ReadEntityByIdResponse, ReadEntityByNameResponse,
17            },
18        },
19    },
20    client::Client,
21    error::ClientError,
22};
23
24/// Create an entity.
25///
26/// See [CreateEntityRequest]
27pub async fn create(
28    client: &impl Client,
29    opts: Option<&mut CreateEntityRequestBuilder>,
30) -> Result<CreateEntityResponse, ClientError> {
31    let mut t = CreateEntityRequest::builder();
32    let endpoint = opts.unwrap_or(&mut t).build().unwrap();
33    api::exec_with_result(client, endpoint).await
34}
35
36/// Reads entity by `id`.
37///
38/// See [ReadEntityByIdRequest]
39pub async fn read_by_id(
40    client: &impl Client,
41    id: &str,
42) -> Result<ReadEntityByIdResponse, ClientError> {
43    let endpoint = ReadEntityByIdRequest::builder().id(id).build().unwrap();
44
45    api::exec_with_result(client, endpoint).await
46}
47
48/// Update entity by `id`.
49///
50/// See [UpdateEntityByIdRequest]
51pub async fn update_by_id(
52    client: &impl Client,
53    id: &str,
54    opts: Option<&mut UpdateEntityByIdRequestBuilder>,
55) -> Result<(), ClientError> {
56    let mut t = UpdateEntityByIdRequest::builder();
57    let endpoint = opts.unwrap_or(&mut t).id(id).build().unwrap();
58    api::exec_with_empty(client, endpoint).await
59}
60
61/// Delete entity by `id`.
62///
63/// See [DeleteEntityByIdRequest]
64pub async fn delete_by_id(client: &impl Client, id: &str) -> Result<(), ClientError> {
65    let endpoint = DeleteEntityByIdRequest::builder().id(id).build().unwrap();
66    api::exec_with_empty(client, endpoint).await
67}
68
69/// Batch delete entity.
70///
71/// See [BatchDeleteRequest]
72pub async fn batch_delete<T: fmt::Debug + Into<Vec<String>>>(
73    client: &impl Client,
74    entity_ids: T,
75) -> Result<(), ClientError> {
76    let endpoint = BatchDeleteRequest::builder()
77        .entity_ids(entity_ids)
78        .build()
79        .unwrap();
80    api::exec_with_empty(client, endpoint).await
81}
82
83/// List entities by ID.
84///
85/// See [ListEntitiesByIdRequest]
86pub async fn list_by_id(client: &impl Client) -> Result<ListEntitiesByIdResponse, ClientError> {
87    let endpoint = ListEntitiesByIdRequest::builder().build().unwrap();
88    api::exec_with_result(client, endpoint).await
89}
90
91/// Creates or update an entity with the given `name`.
92///
93/// See [CreateEntityByNameRequest]
94pub async fn create_or_update_by_name(
95    client: &impl Client,
96    name: &str,
97    opts: Option<&mut CreateEntityByNameRequestBuilder>,
98) -> Result<(), ClientError> {
99    let mut t = CreateEntityByNameRequest::builder();
100    let endpoint = opts.unwrap_or(&mut t).name(name).build().unwrap();
101    api::exec_with_empty(client, endpoint).await
102}
103
104/// Reads entity by `name`.
105///
106/// See [ReadEntityByNameRequest]
107pub async fn read_by_name(
108    client: &impl Client,
109    name: &str,
110) -> Result<ReadEntityByNameResponse, ClientError> {
111    let endpoint = ReadEntityByNameRequest::builder()
112        .name(name)
113        .build()
114        .unwrap();
115
116    api::exec_with_result(client, endpoint).await
117}
118
119/// Delete entity by `name`.
120///
121/// See [DeleteEntityByIdRequest]
122pub async fn delete_by_name(client: &impl Client, name: &str) -> Result<(), ClientError> {
123    let endpoint = DeleteEntityByNameRequest::builder()
124        .name(name)
125        .build()
126        .unwrap();
127    api::exec_with_empty(client, endpoint).await
128}
129
130/// List entities by Name.
131///
132/// See [ListEntitiesByNameRequest]
133pub async fn list_by_name(client: &impl Client) -> Result<ListEntitiesByNameResponse, ClientError> {
134    let endpoint = ListEntitiesByNameRequest::builder().build().unwrap();
135    api::exec_with_result(client, endpoint).await
136}
137
138/// Merge entities.
139///
140/// See [MergeEntitiesRequest]
141pub async fn merge(
142    client: &impl Client,
143    from_entity_ids: Vec<String>,
144    to_entity_id: String,
145    opts: Option<&mut MergeEntitiesRequestBuilder>,
146) -> Result<(), ClientError> {
147    let mut t = MergeEntitiesRequest::builder();
148    let endpoint = opts
149        .unwrap_or(&mut t)
150        .from_entity_ids(from_entity_ids)
151        .to_entity_id(to_entity_id)
152        .build()
153        .unwrap();
154    api::exec_with_empty(client, endpoint).await
155}