redis_enterprise/
redis_acls.rs1use crate::client::RestClient;
9use crate::error::Result;
10use serde::{Deserialize, Serialize};
11use serde_json::Value;
12use typed_builder::TypedBuilder;
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
16pub struct RedisAcl {
17 pub uid: u32,
18 pub name: String,
19 pub acl: String,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub description: Option<String>,
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub bdbs: Option<Vec<u32>>,
25
26 #[serde(flatten)]
27 pub extra: Value,
28}
29
30#[derive(Debug, Serialize, Deserialize, TypedBuilder)]
32pub struct CreateRedisAclRequest {
33 #[builder(setter(into))]
34 pub name: String,
35 #[builder(setter(into))]
36 pub acl: String,
37 #[serde(skip_serializing_if = "Option::is_none")]
38 #[builder(default, setter(into, strip_option))]
39 pub description: Option<String>,
40}
41
42pub struct RedisAclHandler {
44 client: RestClient,
45}
46
47pub type RedisAclsHandler = RedisAclHandler;
49
50impl RedisAclHandler {
51 pub fn new(client: RestClient) -> Self {
52 RedisAclHandler { client }
53 }
54
55 pub async fn list(&self) -> Result<Vec<RedisAcl>> {
57 self.client.get("/v1/redis_acls").await
58 }
59
60 pub async fn get(&self, uid: u32) -> Result<RedisAcl> {
62 self.client.get(&format!("/v1/redis_acls/{}", uid)).await
63 }
64
65 pub async fn create(&self, request: CreateRedisAclRequest) -> Result<RedisAcl> {
67 self.client.post("/v1/redis_acls", &request).await
68 }
69
70 pub async fn update(&self, uid: u32, request: CreateRedisAclRequest) -> Result<RedisAcl> {
72 self.client
73 .put(&format!("/v1/redis_acls/{}", uid), &request)
74 .await
75 }
76
77 pub async fn delete(&self, uid: u32) -> Result<()> {
79 self.client.delete(&format!("/v1/redis_acls/{}", uid)).await
80 }
81
82 pub async fn validate(&self, body: CreateRedisAclRequest) -> Result<AclValidation> {
84 self.client.post("/v1/redis_acls/validate", &body).await
85 }
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
89pub struct AclValidation {
90 pub valid: bool,
91 #[serde(skip_serializing_if = "Option::is_none")]
92 pub message: Option<String>,
93 #[serde(flatten)]
94 pub extra: Value,
95}