From ab8aa89f2a546ca31203131a93be4fb34ee506bb Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Sun, 29 Sep 2019 20:16:54 -0700 Subject: [PATCH] Add real networked message type --- src/web/api.rs | 12 +++++++++++- src/web/interface.rs | 23 +++++++++++++++++++---- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/web/api.rs b/src/web/api.rs index 6793e089..1c979e74 100644 --- a/src/web/api.rs +++ b/src/web/api.rs @@ -94,7 +94,17 @@ impl ApiService { // TODO: Transform applied patch sets into subscribe responses let api_messages = messages .into_iter() - .map(|_message| SubscribeMessage) + .map(|message| { + let removed_instances = message.removed; + let added_instances = HashMap::new(); // TODO + let updated_instances = Vec::new(); // TODO + + SubscribeMessage { + removed_instances, + added_instances, + updated_instances, + } + }) .collect(); json_ok(SubscribeResponse { diff --git a/src/web/interface.rs b/src/web/interface.rs index c2fd3ca5..a3ab3432 100644 --- a/src/web/interface.rs +++ b/src/web/interface.rs @@ -16,9 +16,24 @@ pub(crate) const SERVER_VERSION: &str = env!("CARGO_PKG_VERSION"); /// Current protocol version, which is required to match. pub const PROTOCOL_VERSION: u64 = 3; -// TODO +/// Message returned by Rojo API when a change has occurred. #[derive(Debug, Serialize, Deserialize)] -pub struct SubscribeMessage; +#[serde(rename_all = "camelCase")] +pub struct SubscribeMessage<'a> { + pub removed_instances: Vec, + pub added_instances: HashMap>, + pub updated_instances: Vec, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct InstanceUpdate { + pub id: RbxId, + pub changed_name: Option, + pub changed_class_name: Option, + pub changed_properties: HashMap, + pub changed_metadata: Option, +} #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] @@ -73,10 +88,10 @@ pub struct ReadResponse<'a> { /// Response body from /api/subscribe/{cursor} #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] -pub struct SubscribeResponse { +pub struct SubscribeResponse<'a> { pub session_id: SessionId, pub message_cursor: u32, - pub messages: Vec, + pub messages: Vec>, } /// General response type returned from all Rojo routes