use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Subscription {
pub id: String,
#[serde(alias = "name")]
pub display_name: String,
pub state: String,
#[serde(alias = "tenantId")]
pub tenant_id: String,
#[serde(alias = "isDefault")]
pub is_default: Option<bool>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceGroup {
pub name: String,
pub id: String,
pub location: String,
pub tags: Option<HashMap<String, String>>,
pub properties: Option<ResourceGroupProperties>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ResourceGroupProperties {
#[serde(alias = "provisioningState", alias = "provisioning_state")]
pub provisioning_state: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CosmosAccount {
pub name: String,
pub id: String,
pub location: String,
#[serde(alias = "resourceGroup", alias = "resource_group")]
pub resource_group: String,
#[serde(rename = "type", alias = "resourceType", alias = "resource_type")]
pub resource_type: String,
pub kind: String,
#[serde(alias = "provisioningState", alias = "provisioning_state")]
pub provisioning_state: String,
#[serde(alias = "documentEndpoint", alias = "document_endpoint")]
pub document_endpoint: String,
pub tags: Option<HashMap<String, String>>,
#[serde(alias = "backupPolicy")]
pub backup_policy: Option<BackupPolicy>,
#[serde(alias = "analyticalStorageConfiguration")]
pub analytical_storage_configuration: Option<AnalyticalStorageConfiguration>,
#[serde(alias = "apiProperties")]
pub api_properties: Option<ApiProperties>,
pub capabilities: Option<Vec<Capability>>,
pub capacity: Option<CapacitySettings>,
#[serde(alias = "consistencyPolicy")]
pub consistency_policy: Option<ConsistencyPolicy>,
pub cors: Option<Vec<CorsPolicy>>,
#[serde(alias = "createMode")]
pub create_mode: Option<String>,
#[serde(alias = "customerManagedKeyStatus")]
pub customer_managed_key_status: Option<String>,
#[serde(alias = "databaseAccountOfferType")]
pub database_account_offer_type: Option<String>,
#[serde(alias = "defaultIdentity")]
pub default_identity: Option<String>,
#[serde(alias = "disableKeyBasedMetadataWriteAccess")]
pub disable_key_based_metadata_write_access: Option<bool>,
#[serde(alias = "disableLocalAuth")]
pub disable_local_auth: Option<bool>,
#[serde(alias = "enableAnalyticalStorage")]
pub enable_analytical_storage: Option<bool>,
#[serde(alias = "enableAutomaticFailover")]
pub enable_automatic_failover: Option<bool>,
#[serde(alias = "enableBurstCapacity")]
pub enable_burst_capacity: Option<bool>,
#[serde(alias = "enableCassandraConnector")]
pub enable_cassandra_connector: Option<bool>,
#[serde(alias = "enableFreeTier")]
pub enable_free_tier: Option<bool>,
#[serde(alias = "enableMultipleWriteLocations")]
pub enable_multiple_write_locations: Option<bool>,
#[serde(alias = "enablePartitionMerge")]
pub enable_partition_merge: Option<bool>,
#[serde(alias = "enablePerRegionPerPartitionAutoscale")]
pub enable_per_region_per_partition_autoscale: Option<bool>,
#[serde(alias = "failoverPolicies")]
pub failover_policies: Option<Vec<FailoverPolicy>>,
pub identity: Option<AccountIdentity>,
#[serde(alias = "instanceId")]
pub instance_id: Option<String>,
#[serde(alias = "ipRules")]
pub ip_rules: Option<Vec<IpRule>>,
#[serde(alias = "isVirtualNetworkFilterEnabled")]
pub is_virtual_network_filter_enabled: Option<bool>,
#[serde(alias = "keyVaultKeyUri")]
pub key_vault_key_uri: Option<String>,
#[serde(alias = "keysMetadata")]
pub keys_metadata: Option<KeysMetadata>,
pub locations: Option<Vec<AccountLocation>>,
#[serde(alias = "minimalTlsVersion")]
pub minimal_tls_version: Option<String>,
#[serde(alias = "networkAclBypass")]
pub network_acl_bypass: Option<String>,
#[serde(alias = "networkAclBypassResourceIds")]
pub network_acl_bypass_resource_ids: Option<Vec<String>>,
#[serde(alias = "privateEndpointConnections")]
pub private_endpoint_connections: Option<Vec<PrivateEndpointConnection>>,
#[serde(alias = "publicNetworkAccess")]
pub public_network_access: Option<String>,
#[serde(alias = "readLocations")]
pub read_locations: Option<Vec<AccountLocation>>,
#[serde(alias = "restoreParameters")]
pub restore_parameters: Option<RestoreParameters>,
#[serde(alias = "systemData")]
pub system_data: Option<SystemData>,
#[serde(alias = "virtualNetworkRules")]
pub virtual_network_rules: Option<Vec<VirtualNetworkRule>>,
#[serde(alias = "writeLocations")]
pub write_locations: Option<Vec<AccountLocation>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AnalyticalStorageConfiguration {
pub schema_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ApiProperties {
pub server_version: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Capability {
pub name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BackupPolicy {
#[serde(rename = "type")]
pub backup_type: String,
pub migration_state: Option<String>,
pub periodic_mode_properties: Option<PeriodicBackupProperties>,
pub continuous_mode_properties: Option<ContinuousBackupProperties>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PeriodicBackupProperties {
pub backup_interval_in_minutes: Option<i32>,
pub backup_retention_interval_in_hours: Option<i32>,
pub backup_storage_redundancy: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ContinuousBackupProperties {
pub tier: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct FailoverPolicy {
pub failover_priority: i32,
pub id: Option<String>,
pub location_name: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountIdentity {
pub principal_id: Option<String>,
pub tenant_id: Option<String>,
#[serde(rename = "type")]
pub identity_type: Option<String>,
pub user_assigned_identities: Option<HashMap<String, serde_json::Value>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IpRule {
pub ip_address_or_range: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct KeysMetadata {
pub primary_master_key: Option<KeyMetadata>,
pub primary_readonly_master_key: Option<KeyMetadata>,
pub secondary_master_key: Option<KeyMetadata>,
pub secondary_readonly_master_key: Option<KeyMetadata>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct KeyMetadata {
pub generation_time: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateEndpointConnection {
pub id: Option<String>,
pub name: Option<String>,
#[serde(rename = "type")]
pub connection_type: Option<String>,
pub group_id: Option<String>,
pub private_endpoint: Option<PrivateEndpoint>,
pub private_link_service_connection_state: Option<PrivateLinkServiceConnectionState>,
pub provisioning_state: Option<String>,
pub resource_group: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateEndpoint {
pub id: String,
pub resource_group: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PrivateLinkServiceConnectionState {
pub actions_required: Option<String>,
pub description: Option<String>,
pub status: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct RestoreParameters {
pub restore_mode: Option<String>,
pub restore_source: Option<String>,
pub restore_timestamp_in_utc: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SystemData {
pub created_at: Option<String>,
pub created_by: Option<String>,
pub created_by_type: Option<String>,
pub last_modified_at: Option<String>,
pub last_modified_by: Option<String>,
pub last_modified_by_type: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VirtualNetworkRule {
pub id: String,
pub ignore_missing_vnet_service_endpoint: Option<bool>,
pub resource_group: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CapacitySettings {
pub total_throughput_limit: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConsistencyPolicy {
pub default_consistency_level: String,
pub max_staleness_prefix: Option<i64>,
pub max_interval_in_seconds: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CorsPolicy {
pub allowed_origins: String,
pub allowed_methods: String,
pub allowed_headers: String,
pub exposed_headers: String,
pub max_age_in_seconds: Option<i32>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AccountLocation {
pub location_name: String,
pub provisioning_state: String,
pub failover_priority: i32,
pub is_zone_redundant: Option<bool>,
pub id: Option<String>,
pub document_endpoint: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CosmosDatabase {
pub name: String,
pub id: String,
pub throughput_settings: Option<ThroughputSettings>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ThroughputSettings {
pub throughput: Option<i32>,
pub autoscale_settings: Option<AutoscaleSettings>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AutoscaleSettings {
pub max_throughput: i32,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CosmosContainer {
pub name: String,
pub id: String,
pub partition_key: Option<PartitionKey>,
pub throughput_settings: Option<ThroughputSettings>,
pub indexing_policy: Option<IndexingPolicy>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct PartitionKey {
pub paths: Vec<String>,
pub kind: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IndexingPolicy {
pub automatic: Option<bool>,
pub indexing_mode: Option<String>,
pub included_paths: Option<Vec<IndexPath>>,
pub excluded_paths: Option<Vec<IndexPath>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct IndexPath {
pub path: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CosmosKeys {
pub primary_master_key: String,
pub secondary_master_key: String,
pub primary_readonly_master_key: String,
pub secondary_readonly_master_key: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct CosmosConnectionStrings {
pub connection_strings: Vec<ConnectionString>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConnectionString {
pub description: String,
pub connection_string: String,
}