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 TRANSFER_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct TransferData {
#[serde(default)]
pub servers: BTreeMap<String, Value>,
#[serde(default)]
pub users: BTreeMap<String, Value>,
#[serde(default)]
pub accesses: BTreeMap<String, Value>,
#[serde(default)]
pub host_keys: BTreeMap<String, Value>,
#[serde(default)]
pub workflows: BTreeMap<String, Value>,
#[serde(default)]
pub executions: BTreeMap<String, Value>,
#[serde(default)]
pub agreements: BTreeMap<String, Value>,
#[serde(default)]
pub connectors: BTreeMap<String, Value>,
#[serde(default)]
pub profiles: BTreeMap<String, Value>,
#[serde(default)]
pub certificates: BTreeMap<String, Value>,
#[serde(default)]
pub web_apps: BTreeMap<String, Value>,
#[serde(default)]
pub web_app_customizations: BTreeMap<String, Value>,
#[serde(default)]
pub file_transfers: BTreeMap<String, Value>,
#[serde(default)]
pub tags: BTreeMap<String, BTreeMap<String, String>>,
}
impl AccountState for TransferData {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedTransferState = Arc<RwLock<MultiAccountState<TransferData>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct TransferSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<TransferData>,
}