use std::collections::BTreeMap;
use std::sync::Arc;
use parking_lot::RwLock;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use fakecloud_core::multi_account::{AccountState, MultiAccountState};
pub const DMS_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct DmsData {
#[serde(default)]
pub replication_instances: BTreeMap<String, Value>,
#[serde(default)]
pub endpoints: BTreeMap<String, Value>,
#[serde(default)]
pub replication_tasks: BTreeMap<String, Value>,
#[serde(default)]
pub subnet_groups: BTreeMap<String, Value>,
#[serde(default)]
pub event_subscriptions: BTreeMap<String, Value>,
#[serde(default)]
pub certificates: BTreeMap<String, Value>,
#[serde(default)]
pub replication_configs: BTreeMap<String, Value>,
#[serde(default)]
pub replications: BTreeMap<String, Value>,
#[serde(default)]
pub data_providers: BTreeMap<String, Value>,
#[serde(default)]
pub instance_profiles: BTreeMap<String, Value>,
#[serde(default)]
pub migration_projects: BTreeMap<String, Value>,
#[serde(default)]
pub data_migrations: BTreeMap<String, Value>,
#[serde(default)]
pub assessment_runs: BTreeMap<String, Value>,
#[serde(default)]
pub connections: BTreeMap<String, Value>,
#[serde(default)]
pub fleet_advisor_collectors: BTreeMap<String, Value>,
#[serde(default)]
pub schema_conversion_requests: BTreeMap<String, Value>,
#[serde(default)]
pub recommendations: BTreeMap<String, Value>,
#[serde(default)]
pub conversion_configs: BTreeMap<String, String>,
#[serde(default)]
pub refresh_schemas_status: BTreeMap<String, Value>,
#[serde(default)]
pub tags: BTreeMap<String, BTreeMap<String, String>>,
}
impl AccountState for DmsData {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedDmsState = Arc<RwLock<MultiAccountState<DmsData>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct DmsSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<DmsData>,
}