fakecloud_managedblockchain/
state.rs1use std::collections::BTreeMap;
11use std::sync::Arc;
12
13use parking_lot::RwLock;
14use serde::{Deserialize, Serialize};
15use serde_json::Value;
16
17use fakecloud_core::multi_account::{AccountState, MultiAccountState};
18
19pub const MANAGEDBLOCKCHAIN_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
20
21#[derive(Debug, Clone, Default, Serialize, Deserialize)]
23pub struct ManagedBlockchainData {
24 #[serde(default)]
26 pub networks: BTreeMap<String, Value>,
27 #[serde(default)]
29 pub members: BTreeMap<String, Value>,
30 #[serde(default)]
32 pub nodes: BTreeMap<String, Value>,
33 #[serde(default)]
35 pub proposals: BTreeMap<String, Value>,
36 #[serde(default)]
38 pub votes: BTreeMap<String, Vec<Value>>,
39 #[serde(default)]
42 pub invitations: BTreeMap<String, Value>,
43 #[serde(default)]
45 pub accessors: BTreeMap<String, Value>,
46 #[serde(default)]
48 pub tags: BTreeMap<String, BTreeMap<String, String>>,
49}
50
51impl AccountState for ManagedBlockchainData {
52 fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
53 Self::default()
54 }
55}
56
57pub type SharedManagedBlockchainState = Arc<RwLock<MultiAccountState<ManagedBlockchainData>>>;
58
59#[derive(Debug, Serialize, Deserialize)]
60pub struct ManagedBlockchainSnapshot {
61 pub schema_version: u32,
62 pub accounts: MultiAccountState<ManagedBlockchainData>,
63}
64
65#[cfg(test)]
66mod tests {
67 use super::*;
68
69 #[test]
70 fn new_account_is_empty() {
71 let data = ManagedBlockchainData::new_for_account("000000000000", "us-east-1", "");
72 assert!(data.networks.is_empty());
73 assert!(data.members.is_empty());
74 assert!(data.accessors.is_empty());
75 }
76}