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 IOTDATA_SNAPSHOT_SCHEMA_VERSION: u32 = 1;
pub const CLASSIC_SHADOW_KEY: &str = "";
#[derive(Debug, Clone, Default, Serialize, Deserialize)]
pub struct IotDataData {
#[serde(default)]
pub shadows: BTreeMap<String, BTreeMap<String, Value>>,
#[serde(default)]
pub retained: BTreeMap<String, Value>,
}
impl AccountState for IotDataData {
fn new_for_account(_account_id: &str, _region: &str, _endpoint: &str) -> Self {
Self::default()
}
}
pub type SharedIotDataState = Arc<RwLock<MultiAccountState<IotDataData>>>;
#[derive(Debug, Serialize, Deserialize)]
pub struct IotDataSnapshot {
pub schema_version: u32,
pub accounts: MultiAccountState<IotDataData>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn new_account_is_empty() {
let data = IotDataData::new_for_account("000000000000", "us-east-1", "");
assert!(data.shadows.is_empty());
assert!(data.retained.is_empty());
}
}