1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
/*
* @Author: Jerry.Yang
* @Date: 2024-11-07 14:39:42
* @LastEditors: Jerry.Yang
* @LastEditTime: 2025-02-19 11:03:29
* @Description: Implementation of the Redis service, providing methods for managing Redis database instances.
*/
use crate::service::redis::api_create_db_instance;
use crate::service::redis::api_decrease_db_instance_node_number;
use crate::service::redis::api_describe_db_instance_detail;
use crate::service::redis::api_describe_db_instances;
use crate::service::redis::api_enable_sharded_cluster;
use crate::service::redis::api_increase_db_instance_node_number;
use crate::service::redis::api_modify_allow_list;
use crate::service::redis::api_modify_db_instance_shard_capacity;
use crate::service::redis::api_modify_db_instance_shard_number;
use crate::service::redis::{Redis, RedisService};
use crate::volcengine::client::client;
use crate::volcengine::client::client_info;
use crate::volcengine::client::config as client_config;
use crate::volcengine::common;
use crate::volcengine::error::error;
use crate::volcengine::request::handles;
use crate::volcengine::session::session;
/// Implementation of RedisService trait for Redis struct.
/// Provides core functionality for interacting with Volcengine Redis service,
/// including instance lifecycle management and security configurations.
impl RedisService for Redis {
/// Initializes a new Redis service client from a session configuration.
///
/// # Parameters
/// - `session`: Authenticated session containing credentials and regional configuration
///
/// # Workflow
/// 1. Creates service-specific client configuration
/// 2. Constructs client information (service metadata)
/// 3. Initializes network handles
/// 4. Builds complete client instance
///
/// # Returns
/// - `Ok(Redis)`: Configured Redis client ready for API operations
/// - `Err(error::Error)`: Configuration errors during client setup
fn new_redis(session: session::Session) -> Result<Self, error::Error> {
// Initialize Redis-specific client configuration from session
let client_config = session.new_client_config(client_config::ClientServiceName::Redis);
// Build service metadata for API requests
let client_info = client_info::ClientInfo::builder()
.with_service_name(client_config::ClientServiceName::Redis)
.with_api_version(common::COMMON_VERSION_2020_12_07)
.with_signing_region(&client_config.signing_region)
.build()?;
// Initialize network connection pool and TLS configuration
let request_handles = handles::Handles {};
// Construct complete client instance
let client = client::Client::builder()
.with_client_info(&client_info) // Service metadata
.with_config(&client_config) // Connection parameters
.with_handles(&request_handles) // Network resources
.build()?; // Validate configuration
Ok(Redis { client: client })
}
/// Creates a new Redis database instance with specified configuration.
///
/// # Parameters
/// - `request`: CreateDbInstanceReq containing:
/// - Instance specifications (memory, version, etc.)
/// - Network configuration (VPC, subnet)
/// - Authentication parameters
///
/// # Returns
/// - `Ok(CreateDbInstanceResp)`: Contains created instance ID and status
/// - `Err(error::Error)`: Creation failures (quota exceeded, invalid params)
async fn new_create_db_instance(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisCreateDbInstanceReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisCreateDbInstanceResp,
error::Error,
> {
// Delegate to API implementation module
api_create_db_instance::ApiCreateDBInstanceRedis
.new_create_db_instance(self, request)
.await
}
/// Retrieves detailed configuration and status of a Redis instance.
///
/// # Parameters
/// - `request`: DescribeDbInstanceDetailReq with target instance ID
///
/// # Returns
/// - `Ok(DescribeDbInstanceDetailResp)`: Detailed instance metadata including:
/// - Current state (running/creating/error)
/// - Connection endpoints
/// - Resource utilization metrics
/// - Configuration parameters
async fn new_describe_db_instance_detail(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisDescribeDbInstanceDetailReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisDescribeDbInstanceDetailResp,
error::Error,
> {
api_describe_db_instance_detail::ApiDescribeDBInstanceDetailRedis
.new_describe_db_instance(self, request)
.await
}
/// Updates network access rules (allow list) for a Redis instance.
///
/// # Security Note
/// - Modifies IP whitelist rules controlling instance access
/// - Supports CIDR ranges and individual IP addresses
///
/// # Parameters
/// - `request`: ModifyAllowListReq containing:
/// - Allow list ID to modify
/// - New IP/CIDR rules
/// - Optional rule description
///
/// # Returns
/// - `Ok(ModifyAllowListResp)`: Updated allow list version and status
async fn new_modify_allow_list(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_allow::RedisModifyAllowListReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_allow::RedisModifyAllowListResp,
error::Error,
> {
api_modify_allow_list::ApiModifyAllowListRedis
.new_modify_allow_list(self, request)
.await
}
/// Increases the node number of a Redis database instance.
///
/// This function sends a request to the Volcengine Redis service to increase the number of nodes
/// in a Redis database instance. It delegates the actual request handling to the
/// `ApiIncreaseDbInstanceNodeNumber` struct.
///
/// # Arguments
/// * `request` - A `IncreaseDbInstanceNodeNumberReq` structure containing the request parameters.
///
/// # Returns
/// * `Result<IncreaseDbInstanceNodeNumberResp, error::Error>` - On success, returns a `IncreaseDbInstanceNodeNumberResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_increase_db_instance_node_number(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisIncreaseDbInstanceNodeNumberReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisIncreaseDbInstanceNodeNumberResp,
error::Error,
> {
api_increase_db_instance_node_number::ApiIncreaseDbInstanceNodeNumber
.new_increase_db_instance_node_number(self, request)
.await
}
/// Decreases the node number of a Redis database instance.
///
/// This function sends a request to the Volcengine Redis service to decrease the number of nodes
/// in a Redis database instance. It delegates the actual request handling to the
/// `ApiDecreaseDBInstanceNodeNumber` struct.
///
/// # Arguments
/// * `request` - A `DecreaseDbInstanceNodeNumberReq` structure containing the request parameters.
///
/// # Returns
/// * `Result<DecreaseDbInstanceNodeNumberResp, error::Error>` - On success, returns a `DecreaseDbInstanceNodeNumberResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_decrease_db_instance_node_number(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisDecreaseDbInstanceNodeNumberReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisDecreaseDbInstanceNodeNumberResp,
error::Error,
> {
api_decrease_db_instance_node_number::ApiDecreaseDBInstanceNodeNumber
.new_decrease_db_instance_node_number(self, request)
.await
}
/// Modifies the shard capacity of a Redis database instance.
///
/// This function sends a request to the Volcengine Redis service to modify the shard capacity
/// of a Redis database instance. It delegates the actual request handling to the
/// `ApiModifyDBInstanceShardCapacity` struct.
///
/// # Arguments
/// * `request` - A `ModifyDbInstanceShardCapacityReq` structure containing the request parameters.
///
/// # Returns
/// * `Result<ModifyDbInstanceShardCapacityResp, error::Error>` - On success, returns a `ModifyDbInstanceShardCapacityResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_modify_db_instance_shard_capacity(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisModifyDbInstanceShardCapacityReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisModifyDbInstanceShardCapacityResp,
error::Error,
> {
api_modify_db_instance_shard_capacity::ApiModifyDBInstanceShardCapacity
.new_modify_db_instance_shard_capacity(self, request)
.await
}
/// Modifies the shard number of a Redis database instance.
///
/// This function sends a request to the Volcengine Redis service to modify the shard number
/// of a Redis database instance. It delegates the actual request handling to the
/// `ApiModifyDBInstanceShardNumber` struct.
///
/// # Arguments
/// * `request` - A `ModifyDbInstanceShardNumberReq` structure containing the request parameters.
///
/// # Returns
/// * `Result<ModifyDbInstanceShardNumberResp, error::Error>` - On success, returns a `ModifyDbInstanceShardNumberResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_modify_db_instance_shard_number(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisModifyDbInstanceShardNumberReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisModifyDbInstanceShardNumberResp,
error::Error,
> {
api_modify_db_instance_shard_number::ApiModifyDBInstanceShardNumber
.new_modify_db_instance_shard_number(self, request)
.await
}
/// Enables sharded cluster mode for a Redis database instance.
///
/// This function sends a request to the Volcengine Redis service to enable sharded cluster mode
/// for a Redis database instance. It delegates the actual request handling to the
/// `ApiEnableShardedCluster` struct.
///
/// # Arguments
/// * `request` - A `EnableShardedClusterReq` structure containing the request parameters.
///
/// # Returns
/// * `Result<EnableShardedClusterResp, error::Error>` - On success, returns a `EnableShardedClusterResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_enable_sharded_cluster(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisEnableShardedClusterReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisEnableShardedClusterResp,
error::Error,
> {
api_enable_sharded_cluster::ApiEnableShardedCluster
.new_enable_sharded_cluster(self, request)
.await
}
/// Public method to describe the details of a Redis database instance.
///
/// This method acts as a wrapper to call the `new_describe_db_instances` method of the `ApiDescribeDBInstancesRedis` struct.
/// It is used to send a request to the Volcengine Redis service to retrieve detailed information about Redis database instances.
///
/// # Arguments
/// - `&self`: Reference to the current instance of the struct.
/// - `request`: A `RedisDescribeDbInstancesReq` structure containing the request parameters.
///
/// # Returns
/// - `Result<RedisDescribeDbInstancesResp, error::Error>`: On success, returns a `RedisDescribeDbInstancesResp` structure containing the response from the Redis service.
/// On failure, returns an `error::Error` indicating the cause of the failure.
async fn new_describe_db_instances(
&self,
request: volcengine_sdk_protobuf::protobuf::redis_instance::RedisDescribeDbInstancesReq,
) -> Result<
volcengine_sdk_protobuf::protobuf::redis_instance::RedisDescribeDbInstancesResp,
error::Error,
> {
api_describe_db_instances::ApiDescribeDBInstancesRedis
.new_describe_db_instances(self, request)
.await
}
}