redis_enterprise/
license.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 License {
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub key: Option<String>,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub license: Option<String>,
24
25 #[serde(rename = "type")]
27 pub type_: Option<String>,
28
29 pub expired: bool,
31
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub activation_date: Option<String>,
35
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub expiration_date: Option<String>,
39
40 #[serde(skip_serializing_if = "Option::is_none")]
42 pub cluster_name: Option<String>,
43
44 #[serde(skip_serializing_if = "Option::is_none")]
46 pub owner: Option<String>,
47
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub shards_limit: Option<u32>,
51
52 #[serde(skip_serializing_if = "Option::is_none")]
54 pub ram_shards_in_use: Option<u32>,
55
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub ram_shards_limit: Option<u32>,
59
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub flash_shards_in_use: Option<u32>,
63
64 #[serde(skip_serializing_if = "Option::is_none")]
66 pub flash_shards_limit: Option<u32>,
67
68 #[serde(skip_serializing_if = "Option::is_none")]
70 pub node_limit: Option<u32>,
71
72 #[serde(skip_serializing_if = "Option::is_none")]
74 pub features: Option<Vec<String>>,
75
76 #[serde(flatten)]
77 pub extra: Value,
78}
79
80#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
82pub struct LicenseUpdateRequest {
83 #[builder(setter(into))]
85 pub license: String,
86}
87
88#[derive(Debug, Clone, Serialize, Deserialize)]
90pub struct LicenseUsage {
91 pub shards_used: u32,
93 pub shards_limit: u32,
95 pub nodes_used: u32,
97 pub nodes_limit: u32,
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub ram_used: Option<u64>,
102 #[serde(skip_serializing_if = "Option::is_none")]
104 pub ram_limit: Option<u64>,
105
106 #[serde(flatten)]
107 pub extra: Value,
108}
109
110pub struct LicenseHandler {
112 client: RestClient,
113}
114
115impl LicenseHandler {
116 pub fn new(client: RestClient) -> Self {
117 LicenseHandler { client }
118 }
119
120 pub async fn get(&self) -> Result<License> {
122 self.client.get("/v1/license").await
123 }
124
125 pub async fn update(&self, request: LicenseUpdateRequest) -> Result<License> {
127 self.client.put("/v1/license", &request).await
128 }
129
130 pub async fn usage(&self) -> Result<LicenseUsage> {
132 self.client.get("/v1/license/usage").await
133 }
134
135 pub async fn validate(&self, license_key: &str) -> Result<License> {
137 let request = LicenseUpdateRequest {
138 license: license_key.to_string(),
139 };
140 self.client.post("/v1/license/validate", &request).await
141 }
142
143 pub async fn cluster_license(&self) -> Result<License> {
145 self.client.get("/v1/cluster/license").await
146 }
147}