use crate::types::{Link, ProcessorResponse};
use crate::{CloudClient, Result};
use serde::{Deserialize, Serialize};
use serde_json::Value;
use std::collections::HashMap;
use typed_builder::TypedBuilder;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountFixedSubscriptionDatabases {
#[serde(skip_serializing_if = "Option::is_none")]
pub account_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FixedDatabaseImportRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
pub source_type: String,
pub import_from_uri: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseTagUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DynamicEndpoints {
#[serde(skip_serializing_if = "Option::is_none")]
pub public: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Tag {
pub key: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseTagsUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
pub tags: Vec<Tag>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseSyncSourceSpec {
pub endpoint: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub encryption: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub server_cert: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseCertificateSpec {
pub public_certificate_pem_string: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CloudTag {
#[serde(skip_serializing_if = "Option::is_none")]
pub key: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub updated_at: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseSlowLogEntry {
#[serde(skip_serializing_if = "Option::is_none")]
pub id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub start_time: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub duration: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub arguments: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseTagCreateRequest {
pub key: String,
pub value: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FixedDatabaseBackupRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub adhoc_backup_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatabaseModuleSpec {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub parameters: Option<HashMap<String, Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ReplicaOfSpec {
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default)]
pub sync_sources: Vec<DatabaseSyncSourceSpec>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DatabaseBackupStatus {
#[serde(skip_serializing_if = "Option::is_none")]
pub enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub interval: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub destination: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatabaseAlertSpec {
pub name: String,
pub value: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CloudTags {
#[serde(skip_serializing_if = "Option::is_none")]
pub account_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FixedDatabase {
#[serde(skip_serializing_if = "Option::is_none")]
pub database_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub protocol: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub provider: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub region: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_version_compliance: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub resp_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub plan_memory_limit: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub plan_dataset_size: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_limit_measurement_unit: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_limit_in_gb: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dataset_size_in_gb: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_used_in_mb: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub network_monthly_usage_in_byte: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_storage: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub redis_flex: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub support_oss_cluster_api: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub use_external_endpoint_for_oss_cluster_api: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_persistence: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replication: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_eviction_policy: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub activated_on: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_modified: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub public_endpoint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub private_endpoint: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_endpoints: Option<DynamicEndpoints>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_default_user: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub enable_tls: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub password: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub source_ips: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub ssl_client_authentication: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tls_client_authentication: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub replica: Option<ReplicaOfSpec>,
#[serde(skip_serializing_if = "Option::is_none")]
pub clustering_enabled: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub regex_rules: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub hashing_policy: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub modules: Option<Vec<DatabaseModuleSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub alerts: Option<Vec<DatabaseAlertSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub backup: Option<DatabaseBackupStatus>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DatabaseSlowLogEntries {
#[serde(skip_serializing_if = "Option::is_none")]
pub entries: Option<Vec<DatabaseSlowLogEntry>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct TaskStateUpdate {
#[serde(skip_serializing_if = "Option::is_none")]
pub task_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub command_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timestamp: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub response: Option<ProcessorResponse>,
#[serde(skip_serializing_if = "Option::is_none")]
pub links: Option<Vec<Link>>,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct FixedDatabaseCreateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub subscription_id: Option<i32>,
#[builder(setter(into))]
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub protocol: 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(strip_option))]
pub dataset_size_in_gb: Option<f64>,
#[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, into))]
pub redis_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub resp_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub use_external_endpoint_for_oss_cluster_api: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enable_database_clustering: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub number_of_shards: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub data_persistence: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub data_eviction_policy: 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(strip_option, into))]
pub periodic_backup_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub source_ips: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub regex_rules: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub replica_of: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub replica: Option<ReplicaOfSpec>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub client_ssl_certificate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub client_tls_certificates: Option<Vec<DatabaseCertificateSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enable_tls: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub password: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub alerts: Option<Vec<DatabaseAlertSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub modules: Option<Vec<DatabaseModuleSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub command_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, TypedBuilder)]
#[serde(rename_all = "camelCase")]
pub struct FixedDatabaseUpdateRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub subscription_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub database_id: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
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(strip_option))]
pub dataset_size_in_gb: Option<f64>,
#[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, into))]
pub resp_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub use_external_endpoint_for_oss_cluster_api: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enable_database_clustering: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub number_of_shards: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub data_persistence: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub data_eviction_policy: 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(strip_option, into))]
pub periodic_backup_path: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub source_ips: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub replica_of: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub replica: Option<ReplicaOfSpec>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub regex_rules: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub client_ssl_certificate: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub client_tls_certificates: Option<Vec<DatabaseCertificateSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enable_tls: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub password: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub enable_default_user: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option))]
pub alerts: Option<Vec<DatabaseAlertSpec>>,
#[serde(skip_serializing_if = "Option::is_none")]
#[builder(default, setter(strip_option, into))]
pub command_type: Option<String>,
}
pub struct FixedDatabaseHandler {
client: CloudClient,
}
impl FixedDatabaseHandler {
#[must_use]
pub fn new(client: CloudClient) -> Self {
Self { client }
}
pub async fn list(
&self,
subscription_id: i32,
offset: Option<i32>,
limit: Option<i32>,
) -> Result<AccountFixedSubscriptionDatabases> {
let mut query = Vec::new();
if let Some(v) = offset {
query.push(format!("offset={v}"));
}
if let Some(v) = limit {
query.push(format!("limit={v}"));
}
let query_string = if query.is_empty() {
String::new()
} else {
format!("?{}", query.join("&"))
};
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases{query_string}"
))
.await
}
pub async fn create(
&self,
subscription_id: i32,
request: &FixedDatabaseCreateRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/fixed/subscriptions/{subscription_id}/databases"),
request,
)
.await
}
pub async fn delete_by_id(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<TaskStateUpdate> {
let response = self
.client
.delete_raw(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}"
))
.await?;
serde_json::from_value(response).map_err(Into::into)
}
pub async fn get_by_id(&self, subscription_id: i32, database_id: i32) -> Result<FixedDatabase> {
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}"
))
.await
}
pub async fn update(
&self,
subscription_id: i32,
database_id: i32,
request: &FixedDatabaseUpdateRequest,
) -> Result<TaskStateUpdate> {
self.client
.put(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}"),
request,
)
.await
}
pub async fn get_backup_status(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/backup"
))
.await
}
pub async fn backup(
&self,
subscription_id: i32,
database_id: i32,
request: &FixedDatabaseBackupRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}/backup"),
request,
)
.await
}
pub async fn get_import_status(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<TaskStateUpdate> {
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/import"
))
.await
}
pub async fn import(
&self,
subscription_id: i32,
database_id: i32,
request: &FixedDatabaseImportRequest,
) -> Result<TaskStateUpdate> {
self.client
.post(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}/import"),
request,
)
.await
}
pub async fn get_slow_log(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<DatabaseSlowLogEntries> {
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/slow-log"
))
.await
}
pub async fn get_tags(&self, subscription_id: i32, database_id: i32) -> Result<CloudTags> {
self.client
.get(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/tags"
))
.await
}
pub async fn create_tag(
&self,
subscription_id: i32,
database_id: i32,
request: &DatabaseTagCreateRequest,
) -> Result<CloudTag> {
self.client
.post(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}/tags"),
request,
)
.await
}
pub async fn update_tags(
&self,
subscription_id: i32,
database_id: i32,
request: &DatabaseTagsUpdateRequest,
) -> Result<CloudTags> {
self.client
.put(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}/tags"),
request,
)
.await
}
pub async fn delete_tag(
&self,
subscription_id: i32,
database_id: i32,
tag_key: String,
) -> Result<HashMap<String, Value>> {
let response = self
.client
.delete_raw(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/tags/{tag_key}"
))
.await?;
serde_json::from_value(response).map_err(Into::into)
}
pub async fn update_tag(
&self,
subscription_id: i32,
database_id: i32,
tag_key: String,
request: &DatabaseTagUpdateRequest,
) -> Result<CloudTag> {
self.client
.put(
&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/tags/{tag_key}"
),
request,
)
.await
}
pub async fn get_available_target_versions(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<Value> {
self.client
.get_raw(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/available-target-versions"
))
.await
}
pub async fn get_upgrade_status(
&self,
subscription_id: i32,
database_id: i32,
) -> Result<Value> {
self.client
.get_raw(&format!(
"/fixed/subscriptions/{subscription_id}/databases/{database_id}/upgrade"
))
.await
}
pub async fn upgrade_redis_version(
&self,
subscription_id: i32,
database_id: i32,
target_version: &str,
) -> Result<Value> {
let request = serde_json::json!({
"targetVersion": target_version
});
self.client
.post_raw(
&format!("/fixed/subscriptions/{subscription_id}/databases/{database_id}/upgrade"),
request,
)
.await
}
}