use serde::Serialize;
use crate::client::Client;
use crate::error::Error;
use crate::types::Device;
pub struct DevicesResource<'a> {
pub(crate) client: &'a Client,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct RegisterBody {
public_key: String,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct CheckUpdateBody {
device_id: String,
current_version: String,
}
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct HeartbeatBody {
device_id: String,
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct UpdateCheckResponse {
pub update_available: bool,
#[serde(default)]
pub version: Option<String>,
#[serde(default)]
pub download_url: Option<String>,
}
#[derive(Debug, Clone, serde::Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct HeartbeatResponse {
pub success: bool,
}
impl<'a> DevicesResource<'a> {
pub async fn register(&self, public_key: &str) -> Result<Device, Error> {
let body = RegisterBody {
public_key: public_key.to_owned(),
};
self.client.post("/seedRegisterDevice", &body).await
}
pub async fn check_update(
&self,
device_id: &str,
current_version: &str,
) -> Result<UpdateCheckResponse, Error> {
let body = CheckUpdateBody {
device_id: device_id.to_owned(),
current_version: current_version.to_owned(),
};
self.client.post("/seedCheckUpdate", &body).await
}
pub async fn heartbeat(&self, device_id: &str) -> Result<HeartbeatResponse, Error> {
let body = HeartbeatBody {
device_id: device_id.to_owned(),
};
self.client.post("/seedHeartbeat", &body).await
}
}