use crate::alink::{global_id_next, SysAck, ALINK_VERSION};
use crate::shadow::base::*;
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl super::Module {
pub async fn update(&self, value: Value, version: u32) -> crate::Result<()> {
let payload = ShadowUpdateRequest {
method: "update".to_string(),
state: Some(value),
version: Some(version),
};
self.publish(
format!(
"/shadow/update/{}/{}",
self.three.product_key, self.three.device_name
),
&payload,
)
.await
}
pub async fn get(&self) -> crate::Result<()> {
let payload = ShadowUpdateRequest {
method: "get".to_string(),
state: None,
version: None,
};
self.publish(
format!(
"/shadow/update/{}/{}",
self.three.product_key, self.three.device_name
),
&payload,
)
.await
}
pub async fn delete(&self, value: Value, version: u32) -> crate::Result<()> {
let payload = ShadowUpdateRequest {
method: "delete".to_string(),
state: Some(value),
version: Some(version),
};
self.publish(
format!(
"/shadow/update/{}/{}",
self.three.product_key, self.three.device_name
),
&payload,
)
.await
}
}
#[derive(Deserialize, Serialize, Debug, Clone)]
#[serde(rename_all = "camelCase")]
pub struct ShadowUpdateRequest {
pub method: String,
pub state: Option<Value>,
pub version: Option<u32>,
}