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 CODECOMMIT_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileEntry {
pub blob_id: String,
pub mode: String,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct Repo {
pub metadata: Value,
#[serde(default)]
pub branches: BTreeMap<String, String>,
#[serde(default)]
pub commits: BTreeMap<String, Value>,
#[serde(default)]
pub blobs: BTreeMap<String, String>,
#[serde(default)]
pub trees: BTreeMap<String, BTreeMap<String, FileEntry>>,
#[serde(default)]
pub triggers: Vec<Value>,
#[serde(default)]
pub triggers_config_id: String,
#[serde(default)]
pub associated_templates: Vec<String>,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct CodeCommitState {
#[serde(default)]
pub repositories: BTreeMap<String, Repo>,
#[serde(default)]
pub repository_order: Vec<String>,
#[serde(default)]
pub templates: BTreeMap<String, Value>,
#[serde(default)]
pub template_order: Vec<String>,
#[serde(default)]
pub pull_requests: BTreeMap<String, Value>,
#[serde(default)]
pub pull_request_order: Vec<String>,
#[serde(default)]
pub pull_request_counter: u64,
#[serde(default)]
pub pull_request_events: BTreeMap<String, Vec<Value>>,
#[serde(default)]
pub pull_request_approvals: BTreeMap<String, BTreeMap<String, BTreeMap<String, String>>>,
#[serde(default)]
pub pull_request_overrides: BTreeMap<String, BTreeMap<String, String>>,
#[serde(default)]
pub comments: BTreeMap<String, Value>,
#[serde(default)]
pub comment_order: Vec<String>,
#[serde(default)]
pub tags: BTreeMap<String, BTreeMap<String, String>>,
}
impl AccountState for CodeCommitState {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedCodeCommitState = Arc<RwLock<MultiAccountState<CodeCommitState>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct CodeCommitSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<CodeCommitState>,
}