vaultrs/identity/
entity_alias.rs

1use crate::{
2    api::{
3        self,
4        identity::entity_alias::{
5            requests::{
6                CreateEntityAliasRequest, CreateEntityAliasRequestBuilder,
7                DeleteEntityAliasByIdRequest, ListEntityAliasesByIdRequest,
8                ReadEntityAliasByIdRequest, UpdateEntityAliasByIdRequest,
9                UpdateEntityAliasByIdRequestBuilder,
10            },
11            responses::{
12                CreateEntityAliasResponse, ListEntityAliasesByIdResponse,
13                ReadEntityAliasByIdResponse,
14            },
15        },
16    },
17    client::Client,
18    error::ClientError,
19};
20
21/// Create or update an entity alias.
22///
23/// See [ CreateEntityAliasRequest]
24pub async fn create(
25    client: &impl Client,
26    name: &str,
27    canonical_id: &str,
28    mount_accessor: &str,
29    opts: Option<&mut CreateEntityAliasRequestBuilder>,
30) -> Result<CreateEntityAliasResponse, ClientError> {
31    let mut t = CreateEntityAliasRequest::builder();
32    let endpoint = opts
33        .unwrap_or(&mut t)
34        .name(name)
35        .canonical_id(canonical_id)
36        .mount_accessor(mount_accessor)
37        .build()
38        .unwrap();
39    api::exec_with_result(client, endpoint)
40        .await
41        .map_err(|err| {
42            // In the case the response as an empty HTTP Body
43            if matches!(
44                err,
45                ClientError::RestClientError {
46                    source: rustify::errors::ClientError::ResponseParseError { .. }
47                }
48            ) {
49                return ClientError::InvalidUpdateParameter;
50            }
51            err
52        })
53}
54
55/// Reads entity alias by `id`.
56///
57/// See [ReadEntityAliasByIdRequest]
58pub async fn read_by_id(
59    client: &impl Client,
60    id: &str,
61) -> Result<ReadEntityAliasByIdResponse, ClientError> {
62    let endpoint = ReadEntityAliasByIdRequest::builder()
63        .id(id)
64        .build()
65        .unwrap();
66
67    api::exec_with_result(client, endpoint).await
68}
69
70/// Update entity_alias by `id`.
71///
72/// See [UpdateEntityAliasByIdRequest]
73pub async fn update_by_id(
74    client: &impl Client,
75    id: &str,
76    opts: Option<&mut UpdateEntityAliasByIdRequestBuilder>,
77) -> Result<(), ClientError> {
78    let mut t = UpdateEntityAliasByIdRequest::builder();
79    let endpoint = opts.unwrap_or(&mut t).id(id).build().unwrap();
80    api::exec_with_empty(client, endpoint).await
81}
82
83/// Delete entity alias by `id`.
84///
85/// See [DeleteEntityAliasByIdRequest]
86pub async fn delete_by_id(client: &impl Client, id: &str) -> Result<(), ClientError> {
87    let endpoint = DeleteEntityAliasByIdRequest::builder()
88        .id(id)
89        .build()
90        .unwrap();
91    api::exec_with_empty(client, endpoint).await
92}
93
94/// List entity aliases by ID.
95///
96/// See [ListEntityAliasesByIdRequest]
97pub async fn list_by_id(
98    client: &impl Client,
99) -> Result<ListEntityAliasesByIdResponse, ClientError> {
100    let endpoint = ListEntityAliasesByIdRequest::builder().build().unwrap();
101    api::exec_with_result(client, endpoint).await
102}