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 MANAGEDBLOCKCHAIN_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct ManagedBlockchainData {
#[serde(default)]
pub networks: BTreeMap<String, Value>,
#[serde(default)]
pub members: BTreeMap<String, Value>,
#[serde(default)]
pub nodes: BTreeMap<String, Value>,
#[serde(default)]
pub proposals: BTreeMap<String, Value>,
#[serde(default)]
pub votes: BTreeMap<String, Vec<Value>>,
#[serde(default)]
pub invitations: BTreeMap<String, Value>,
#[serde(default)]
pub accessors: BTreeMap<String, Value>,
#[serde(default)]
pub tags: BTreeMap<String, BTreeMap<String, String>>,
}
impl AccountState for ManagedBlockchainData {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedManagedBlockchainState = Arc<RwLock<MultiAccountState<ManagedBlockchainData>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct ManagedBlockchainSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<ManagedBlockchainData>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn new_account_is_empty() {
let data = ManagedBlockchainData::new_for_account("000000000000", "us-east-1", "");
assert!(data.networks.is_empty());
assert!(data.members.is_empty());
assert!(data.accessors.is_empty());
}
}