From 0f78eb933a3a5202ae41b80281e899ee876325b6 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 20 Dec 2017 22:00:01 -0800 Subject: [PATCH] DESIGN doc, stub out /write endpoint --- DESIGN.md | 20 ++++++++++++++++++++ src/rbx.rs | 4 ++-- src/web.rs | 14 ++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 DESIGN.md diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 00000000..a3366429 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,20 @@ +# Rojo Design +This is a super rough draft that I'm trying to use to lay out of my thoughts. + +## API + +### POST `/read` +Accepts a `Vec` of items to read. + +Returns `Vec>`, in the same order as the request. + +### POST `/write` +Accepts a `Vec<{ Route, RbxItem }>` of items to write. + +I imagine that the `Name` attribute of the top-level `RbxItem` would be ignored in favor of the route name? + +## CLI + +### Transform Plugins + +## Roblox Studio Plugin \ No newline at end of file diff --git a/src/rbx.rs b/src/rbx.rs index 043dc3b6..234529ca 100644 --- a/src/rbx.rs +++ b/src/rbx.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; -#[derive(Debug, Serialize)] +#[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct RbxItem { pub name: String, @@ -9,7 +9,7 @@ pub struct RbxItem { pub properties: HashMap, } -#[derive(Debug, Serialize)] +#[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "camelCase", tag = "type")] pub enum RbxValue { String { diff --git a/src/web.rs b/src/web.rs index 2a0e1118..f4237a1e 100644 --- a/src/web.rs +++ b/src/web.rs @@ -40,6 +40,13 @@ struct ChangesResult<'a> { current_time: f64, } +#[derive(Debug, Deserialize)] +#[serde(rename_all = "camelCase")] +struct WriteSpecifier { + route: String, + item: RbxItem, +} + fn json(value: T) -> rouille::Response { let data = serde_json::to_string(&value).unwrap(); rouille::Response::from_data("application/json", data) @@ -181,6 +188,13 @@ pub fn start(config: Config, project: Project, vfs: Arc>) { }, (POST) (/write) => { + let _plugin_chain = PLUGIN_CHAIN.lock().unwrap(); + + let _write_request: Vec = match read_json(&request) { + Some(v) => v, + None => return rouille::Response::empty_400(), + }; + rouille::Response::empty_404() },