Implemented data structures for SYNC, QUERY, and EXECUTE

This commit is contained in:
2022-12-13 05:38:21 +01:00
parent 6627174c6f
commit e4369ebf41
8 changed files with 499 additions and 67 deletions

View File

@@ -1,43 +1,24 @@
pub mod sync;
pub mod query;
pub mod execute;
use serde::Deserialize;
use uuid::Uuid;
#[derive(Debug, PartialEq, Eq, Deserialize)]
#[serde(tag = "intent")]
#[derive(Debug, Deserialize)]
#[serde(tag = "intent", content = "payload")]
enum Intent {
#[serde(rename = "action.devices.SYNC")]
Sync,
#[serde(rename = "action.devices.QUERY")]
Query(query::Payload),
#[serde(rename = "action.devices.EXECUTE")]
Execute(execute::Payload),
}
#[derive(Debug, Deserialize)]
#[serde(rename_all = "camelCase")]
struct Request {
request_id: Uuid,
inputs: Vec<Intent>,
pub request_id: Uuid,
pub inputs: Vec<Intent>,
}
#[cfg(test)]
mod tests {
use std::str::FromStr;
use super::*;
#[test]
fn deserialize_sync_request() {
let json = r#"{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [
{
"intent": "action.devices.SYNC"
}
]
}"#;
let req: Request = serde_json::from_str(json).unwrap();
assert_eq!(req.request_id, Uuid::from_str("ff36a3cc-ec34-11e6-b1a0-64510650abcf").unwrap());
assert_eq!(req.inputs.len(), 1);
assert_eq!(req.inputs[0], Intent::Sync);
}
}