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