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 CODEARTIFACT_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeArtifactState {
#[serde(default)]
pub domains: BTreeMap<String, Value>,
#[serde(default)]
pub domain_order: Vec<String>,
#[serde(default)]
pub domain_policies: BTreeMap<String, Value>,
#[serde(default)]
pub repositories: BTreeMap<String, Value>,
#[serde(default)]
pub repository_order: Vec<String>,
#[serde(default)]
pub repository_policies: BTreeMap<String, Value>,
#[serde(default)]
pub package_groups: BTreeMap<String, Value>,
#[serde(default)]
pub package_group_order: Vec<String>,
#[serde(default)]
pub package_group_allowed: BTreeMap<String, Vec<String>>,
#[serde(default)]
pub packages: BTreeMap<String, Value>,
#[serde(default)]
pub package_order: Vec<String>,
#[serde(default)]
pub package_versions: BTreeMap<String, Value>,
#[serde(default)]
pub assets: BTreeMap<String, Value>,
#[serde(default)]
pub asset_content: BTreeMap<String, String>,
#[serde(default)]
pub readmes: BTreeMap<String, String>,
#[serde(default)]
pub tags: BTreeMap<String, Vec<Value>>,
}
impl AccountState for CodeArtifactState {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedCodeArtifactState = Arc<RwLock<MultiAccountState<CodeArtifactState>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct CodeArtifactSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<CodeArtifactState>,
}