Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/redis-cloud/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ anyhow = { workspace = true }
base64 = { workspace = true }
chrono = { workspace = true }
url = { workspace = true }
typed-builder = "0.20"

[dev-dependencies]
wiremock = { workspace = true }
Expand Down
19 changes: 9 additions & 10 deletions crates/redis-cloud/examples/database_management.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,15 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Uncomment and modify as needed
/*
println!("\nCreating a new database...");
let new_database = CreateDatabaseRequest {
name: "example-db".to_string(),
memory_limit_in_gb: 0.1, // 100 MB
data_persistence: "none".to_string(),
replication: false,
data_eviction: Some("volatile-lru".to_string()),
password: None,
support_oss_cluster_api: Some(false),
use_external_endpoint_for_oss_cluster_api: None,
};
// Using the new builder pattern for cleaner API
let new_database = CreateDatabaseRequest::builder()
.name("example-db")
.memory_limit_in_gb(0.1) // 100 MB
.data_persistence("none")
.replication(false)
.data_eviction("volatile-lru")
.support_oss_cluster_api(false)
.build();

let created_db = db_handler
.create(subscription_id, new_database)
Expand Down
4 changes: 3 additions & 1 deletion crates/redis-cloud/src/models/backup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use serde::{Deserialize, Serialize};
use serde_json::Value;
use typed_builder::TypedBuilder;

/// Backup information
#[derive(Debug, Clone, Serialize, Deserialize)]
Expand All @@ -17,9 +18,10 @@ pub struct CloudBackup {
}

/// Create backup request
#[derive(Debug, Serialize)]
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CreateBackupRequest {
pub database_id: u32,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub description: Option<String>,
}
48 changes: 37 additions & 11 deletions crates/redis-cloud/src/models/database.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

use serde::{Deserialize, Serialize};
use serde_json::Value;
use typed_builder::TypedBuilder;

/// Represents a Redis Cloud database instance
///
Expand Down Expand Up @@ -92,46 +93,71 @@ pub struct ThroughputMeasurement {
///
/// ```rust,no_run
/// use redis_cloud::CreateDatabaseRequest;
/// use serde_json::json;
///
/// let request = json!({
/// "name": "production-cache",
/// "memory_limit_in_gb": 5.0,
/// "data_persistence": "aof-every-1-sec",
/// "replication": true,
/// "password": "secure-password-123",
/// "support_oss_cluster_api": false
/// });
/// let request = CreateDatabaseRequest::builder()
/// .name("production-cache")
/// .memory_limit_in_gb(5.0)
/// .data_persistence("aof-every-1-sec")
/// .replication(true)
/// .password("secure-password-123")
/// .support_oss_cluster_api(false)
/// .build();
/// ```
#[derive(Debug, Serialize)]
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CreateDatabaseRequest {
#[builder(setter(into))]
pub name: String,
pub memory_limit_in_gb: f64,
#[builder(setter(into))]
pub data_persistence: String,
#[builder(default)]
pub replication: bool,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub data_eviction: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub password: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub support_oss_cluster_api: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub use_external_endpoint_for_oss_cluster_api: Option<bool>,
}

/// Update database request
#[derive(Debug, Serialize)]
///
/// All fields are optional - only provide the fields you want to update.
///
/// # Examples
///
/// ```rust,no_run
/// use redis_cloud::UpdateDatabaseRequest;
///
/// let request = UpdateDatabaseRequest::builder()
/// .memory_limit_in_gb(10.0)
/// .replication(true)
/// .build();
/// ```
#[derive(Debug, Serialize, TypedBuilder)]
pub struct UpdateDatabaseRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub memory_limit_in_gb: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub data_persistence: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub replication: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub data_eviction: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub password: Option<String>,
}
23 changes: 22 additions & 1 deletion crates/redis-cloud/src/models/peering.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use serde::{Deserialize, Serialize};
use serde_json::Value;
use typed_builder::TypedBuilder;

/// VPC Peering
#[derive(Debug, Clone, Serialize, Deserialize)]
Expand All @@ -18,12 +19,32 @@ pub struct CloudPeering {
}

/// Create peering request
#[derive(Debug, Serialize)]
///
/// # Examples
///
/// ```rust,no_run
/// use redis_cloud::CreatePeeringRequest;
///
/// let request = CreatePeeringRequest::builder()
/// .subscription_id(123)
/// .provider("AWS")
/// .aws_account_id("123456789012")
/// .vpc_id("vpc-12345678")
/// .vpc_cidr("10.0.0.0/16")
/// .region("us-east-1")
/// .build();
/// ```
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CreatePeeringRequest {
pub subscription_id: u32,
#[builder(setter(into))]
pub provider: String,
#[builder(default, setter(into, strip_option))]
pub aws_account_id: Option<String>,
#[builder(setter(into))]
pub vpc_id: String,
#[builder(setter(into))]
pub vpc_cidr: String,
#[builder(setter(into))]
pub region: String,
}
55 changes: 51 additions & 4 deletions crates/redis-cloud/src/models/subscription.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use serde::{Deserialize, Serialize};
use serde_json::Value;
use typed_builder::TypedBuilder;

/// Cloud subscription
#[derive(Debug, Clone, Serialize, Deserialize)]
Expand Down Expand Up @@ -35,42 +36,88 @@ pub struct CloudRegion {
}

/// Create subscription request
#[derive(Debug, Serialize)]
///
/// # Examples
///
/// ```rust,no_run
/// use redis_cloud::{CreateSubscriptionRequest, CloudProviderConfig, CloudRegionConfig};
///
/// let request = CreateSubscriptionRequest::builder()
/// .name("production")
/// .payment_method_id(12345)
/// .memory_storage("ram")
/// .cloud_provider(
/// CloudProviderConfig::builder()
/// .provider("AWS")
/// .regions(vec![
/// CloudRegionConfig::builder()
/// .region("us-east-1")
/// .multiple_availability_zones(true)
/// .build()
/// ])
/// .build()
/// )
/// .build();
/// ```
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CreateSubscriptionRequest {
#[builder(setter(into))]
pub name: String,
pub payment_method_id: u32,
#[builder(setter(into))]
pub memory_storage: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub persistent_storage_encryption: Option<bool>,
pub cloud_provider: CloudProviderConfig,
}

#[derive(Debug, Serialize)]
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CloudProviderConfig {
#[builder(setter(into))]
pub provider: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub cloud_account_id: Option<u32>,
pub regions: Vec<CloudRegionConfig>,
}

#[derive(Debug, Serialize)]
#[derive(Debug, Serialize, TypedBuilder)]
pub struct CloudRegionConfig {
#[builder(setter(into))]
pub region: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub networking_deployment_cidr: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub preferred_availability_zones: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub multiple_availability_zones: Option<bool>,
}

/// Update subscription request
#[derive(Debug, Serialize)]
///
/// # Examples
///
/// ```rust,no_run
/// use redis_cloud::UpdateSubscriptionRequest;
///
/// let request = UpdateSubscriptionRequest::builder()
/// .name("production-updated")
/// .payment_method_id(54321)
/// .build();
/// ```
#[derive(Debug, Serialize, TypedBuilder)]
pub struct UpdateSubscriptionRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub payment_method_id: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(into, strip_option))]
pub memory_storage: Option<String>,
}
1 change: 1 addition & 0 deletions crates/redis-enterprise/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ anyhow = { workspace = true }
base64 = { workspace = true }
chrono = { workspace = true }
url = { workspace = true }
typed-builder = "0.20"

[dev-dependencies]
wiremock = { workspace = true }
Expand Down
Loading
Loading