redis_cloud/models/database.rs
1//! Database-related data models
2//!
3//! Contains data structures for Redis Cloud database operations including database
4//! configuration, status information, and request/response models for database management.
5
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8
9/// Represents a Redis Cloud database instance
10///
11/// Contains all the configuration, status, and operational information for a database
12/// deployed in Redis Cloud. This includes memory settings, persistence configuration,
13/// replication status, and connection endpoints.
14///
15/// # Examples
16///
17/// ```rust,no_run
18/// # use redis_cloud::{CloudClient, CloudDatabaseHandler};
19/// # #[tokio::main]
20/// # async fn main() -> Result<(), Box<dyn std::error::Error>> {
21/// # let client = CloudClient::builder().api_key("key").api_secret("secret").build()?;
22/// let db_handler = CloudDatabaseHandler::new(client);
23/// let database = db_handler.get(123, 456).await?;
24///
25/// println!("Database: {}", database.name);
26/// println!("Status: {}", database.status);
27/// println!("Memory: {:.1} GB", database.memory_limit_in_gb);
28///
29/// if let Some(endpoint) = &database.public_endpoint {
30/// println!("Connect to: {}", endpoint);
31/// }
32/// # Ok(())
33/// # }
34/// ```
35#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct CloudDatabase {
37 /// Unique database identifier within the subscription
38 pub db_id: u32,
39 /// Human-readable database name
40 pub name: String,
41 /// Redis protocol version (e.g., "redis")
42 pub protocol: String,
43 /// Cloud provider hosting the database (AWS, GCP, Azure)
44 pub provider: String,
45 /// Cloud region where the database is deployed
46 pub region: String,
47 /// Current database status (active, pending, error, etc.)
48 pub status: String,
49 /// Maximum memory allocation in gigabytes
50 pub memory_limit_in_gb: f64,
51 /// Current memory usage in megabytes
52 pub memory_used_in_mb: Option<f64>,
53 /// Memory usage as a percentage (0-100)
54 pub memory_usage: Option<f64>,
55 /// Data persistence configuration (none, aof-every-1-sec, etc.)
56 pub data_persistence: String,
57 /// Whether replication is enabled for high availability
58 pub replication: bool,
59 /// Data eviction policy when memory limit is reached
60 pub data_eviction: Option<String>,
61 /// Throughput measurement configuration
62 pub throughput_measurement: Option<ThroughputMeasurement>,
63 /// ISO 8601 timestamp when database was activated
64 pub activated_on: Option<String>,
65 /// ISO 8601 timestamp of last modification
66 pub last_modified: Option<String>,
67 /// Public internet connection endpoint
68 pub public_endpoint: Option<String>,
69 /// VPC-private connection endpoint
70 pub private_endpoint: Option<String>,
71
72 /// Additional fields not explicitly modeled
73 #[serde(flatten)]
74 pub extra: Value,
75}
76
77/// Throughput measurement configuration for database performance monitoring
78#[derive(Debug, Clone, Serialize, Deserialize)]
79pub struct ThroughputMeasurement {
80 /// Measurement method (e.g., "operations-per-second")
81 pub by: String,
82 /// Throughput limit value
83 pub value: u32,
84}
85
86/// Request payload for creating a new database
87///
88/// Defines the configuration for a new Redis database including memory limits,
89/// persistence settings, and optional features like cluster API support.
90///
91/// # Examples
92///
93/// ```rust,no_run
94/// use redis_cloud::CreateDatabaseRequest;
95/// use serde_json::json;
96///
97/// let request = json!({
98/// "name": "production-cache",
99/// "memory_limit_in_gb": 5.0,
100/// "data_persistence": "aof-every-1-sec",
101/// "replication": true,
102/// "password": "secure-password-123",
103/// "support_oss_cluster_api": false
104/// });
105/// ```
106#[derive(Debug, Serialize)]
107pub struct CreateDatabaseRequest {
108 pub name: String,
109 pub memory_limit_in_gb: f64,
110 pub data_persistence: String,
111 pub replication: bool,
112 #[serde(skip_serializing_if = "Option::is_none")]
113 pub data_eviction: Option<String>,
114 #[serde(skip_serializing_if = "Option::is_none")]
115 pub password: Option<String>,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub support_oss_cluster_api: Option<bool>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub use_external_endpoint_for_oss_cluster_api: Option<bool>,
120}
121
122/// Update database request
123#[derive(Debug, Serialize)]
124pub struct UpdateDatabaseRequest {
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub name: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub memory_limit_in_gb: Option<f64>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub data_persistence: Option<String>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub replication: Option<bool>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub data_eviction: Option<String>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub password: Option<String>,
137}