From 95d7c61921e1038ba6fadf627f7c4c9a8dfdf694 Mon Sep 17 00:00:00 2001 From: Lucien Greathouse Date: Wed, 4 Apr 2018 16:26:08 -0700 Subject: [PATCH] Rename 'Plugin' to 'Middleware' across the server code --- DESIGN.md | 7 ++++++- server/src/bin.rs | 4 ++-- server/src/commands/serve.rs | 12 +++++------ server/src/{plugin.rs => middleware.rs} | 14 ++++++------- .../default_middleware.rs} | 18 ++++++++--------- .../json_model_middleware.rs} | 14 ++++++------- server/src/middlewares/mod.rs | 7 +++++++ .../script_middleware.rs} | 20 +++++++++---------- server/src/plugins/mod.rs | 7 ------- server/src/vfs/vfs_session.rs | 10 +++++----- server/src/web.rs | 6 +++--- 11 files changed, 62 insertions(+), 57 deletions(-) rename server/src/{plugin.rs => middleware.rs} (85%) rename server/src/{plugins/default_plugin.rs => middlewares/default_middleware.rs} (79%) rename server/src/{plugins/json_model_plugin.rs => middlewares/json_model_middleware.rs} (79%) create mode 100644 server/src/middlewares/mod.rs rename server/src/{plugins/script_plugin.rs => middlewares/script_middleware.rs} (87%) delete mode 100644 server/src/plugins/mod.rs diff --git a/DESIGN.md b/DESIGN.md index e1f80f2a..61138039 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -109,4 +109,9 @@ If a mismatch is detected, the server should immediately abort the request and r If the client detects an error in this way, it should delete any connection metadata, including `Id` mappings -- this data is no longer relevant to any new connections. -If the returned project name matches the value that the client was using before, the client should begin a *session restart* by reinitializing the connection to the server and creating new metadata. \ No newline at end of file +If the returned project name matches the value that the client was using before, the client should begin a *session restart* by reinitializing the connection to the server and creating new metadata. + +## Other Changes +These changes aren't directly related to this refactor, but are changes that need to be made to Rojo. + +* Unknown instances will no longer sync as `StringValue` instances \ No newline at end of file diff --git a/server/src/bin.rs b/server/src/bin.rs index 2546c9aa..a40bc6c5 100644 --- a/server/src/bin.rs +++ b/server/src/bin.rs @@ -14,8 +14,8 @@ pub mod project; pub mod pathext; pub mod vfs; pub mod rbx; -pub mod plugin; -pub mod plugins; +pub mod middleware; +pub mod middlewares; pub mod commands; use std::path::{Path, PathBuf}; diff --git a/server/src/commands/serve.rs b/server/src/commands/serve.rs index 998001ba..87e123de 100644 --- a/server/src/commands/serve.rs +++ b/server/src/commands/serve.rs @@ -6,8 +6,8 @@ use std::thread; use rand; use project::{Project, ProjectLoadError}; -use plugin::{PluginChain}; -use plugins::{DefaultPlugin, JsonModelPlugin, ScriptPlugin}; +use middleware::{MiddlewareChain}; +use middlewares::{DefaultMiddleware, JsonModelMiddleware, ScriptMiddleware}; use vfs::{VfsSession, VfsWatcher}; use web; @@ -59,10 +59,10 @@ pub fn serve(project_path: &PathBuf, verbose: bool, port: Option) { }; lazy_static! { - static ref PLUGIN_CHAIN: PluginChain = PluginChain::new(vec![ - Box::new(ScriptPlugin::new()), - Box::new(JsonModelPlugin::new()), - Box::new(DefaultPlugin::new()), + static ref PLUGIN_CHAIN: MiddlewareChain = MiddlewareChain::new(vec![ + Box::new(ScriptMiddleware::new()), + Box::new(JsonModelMiddleware::new()), + Box::new(DefaultMiddleware::new()), ]); } diff --git a/server/src/plugin.rs b/server/src/middleware.rs similarity index 85% rename from server/src/plugin.rs rename to server/src/middleware.rs index 2f25bf55..65de1894 100644 --- a/server/src/plugin.rs +++ b/server/src/middleware.rs @@ -21,10 +21,10 @@ pub enum FileChangeResult { Pass, } -pub trait Plugin { +pub trait Middleware { /// Invoked when a file is read from the filesystem and needs to be turned /// into a Roblox instance. - fn transform_file(&self, plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult; + fn transform_file(&self, plugins: &MiddlewareChain, vfs_item: &VfsItem) -> TransformFileResult; /// Invoked when a Roblox Instance change is reported by the Roblox Studio /// plugin and needs to be turned into a file to save. @@ -36,13 +36,13 @@ pub trait Plugin { } /// A set of plugins that are composed in order. -pub struct PluginChain { - plugins: Vec>, +pub struct MiddlewareChain { + plugins: Vec>, } -impl PluginChain { - pub fn new(plugins: Vec>) -> PluginChain { - PluginChain { +impl MiddlewareChain { + pub fn new(plugins: Vec>) -> MiddlewareChain { + MiddlewareChain { plugins, } } diff --git a/server/src/plugins/default_plugin.rs b/server/src/middlewares/default_middleware.rs similarity index 79% rename from server/src/plugins/default_plugin.rs rename to server/src/middlewares/default_middleware.rs index 56d2a2eb..1a79e546 100644 --- a/server/src/plugins/default_plugin.rs +++ b/server/src/middlewares/default_middleware.rs @@ -1,23 +1,23 @@ use std::collections::HashMap; use core::Route; -use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult}; +use middleware::{Middleware, MiddlewareChain, TransformFileResult, RbxChangeResult, FileChangeResult}; use rbx::{RbxInstance, RbxValue}; use vfs::VfsItem; -/// A plugin with simple transforms: +/// A middleware with simple transforms: /// * Directories become Folder instances /// * Files become StringValue objects with 'Value' as their contents -pub struct DefaultPlugin; +pub struct DefaultMiddleware; -impl DefaultPlugin { - pub fn new() -> DefaultPlugin { - DefaultPlugin +impl DefaultMiddleware { + pub fn new() -> DefaultMiddleware { + DefaultMiddleware } } -impl Plugin for DefaultPlugin { - fn transform_file(&self, plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult { +impl Middleware for DefaultMiddleware { + fn transform_file(&self, middlewares: &MiddlewareChain, vfs_item: &VfsItem) -> TransformFileResult { match vfs_item { &VfsItem::File { ref contents, .. } => { let mut properties = HashMap::new(); @@ -38,7 +38,7 @@ impl Plugin for DefaultPlugin { let mut rbx_children = Vec::new(); for (_, child_item) in children { - match plugins.transform_file(child_item) { + match middlewares.transform_file(child_item) { Some(rbx_item) => { rbx_children.push(rbx_item); }, diff --git a/server/src/plugins/json_model_plugin.rs b/server/src/middlewares/json_model_middleware.rs similarity index 79% rename from server/src/plugins/json_model_plugin.rs rename to server/src/middlewares/json_model_middleware.rs index 0a5a8da9..c8c12d45 100644 --- a/server/src/plugins/json_model_plugin.rs +++ b/server/src/middlewares/json_model_middleware.rs @@ -2,7 +2,7 @@ use regex::Regex; use serde_json; use core::Route; -use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult}; +use middleware::{Middleware, MiddlewareChain, TransformFileResult, RbxChangeResult, FileChangeResult}; use rbx::RbxInstance; use vfs::VfsItem; @@ -10,16 +10,16 @@ lazy_static! { static ref JSON_MODEL_PATTERN: Regex = Regex::new(r"^(.*?)\.model\.json$").unwrap(); } -pub struct JsonModelPlugin; +pub struct JsonModelMiddleware; -impl JsonModelPlugin { - pub fn new() -> JsonModelPlugin { - JsonModelPlugin +impl JsonModelMiddleware { + pub fn new() -> JsonModelMiddleware { + JsonModelMiddleware } } -impl Plugin for JsonModelPlugin { - fn transform_file(&self, _plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult { +impl Middleware for JsonModelMiddleware { + fn transform_file(&self, _middlewares: &MiddlewareChain, vfs_item: &VfsItem) -> TransformFileResult { match vfs_item { &VfsItem::File { ref contents, .. } => { let rbx_name = match JSON_MODEL_PATTERN.captures(vfs_item.name()) { diff --git a/server/src/middlewares/mod.rs b/server/src/middlewares/mod.rs new file mode 100644 index 00000000..f44c7fee --- /dev/null +++ b/server/src/middlewares/mod.rs @@ -0,0 +1,7 @@ +mod default_middleware; +mod script_middleware; +mod json_model_middleware; + +pub use self::default_middleware::*; +pub use self::script_middleware::*; +pub use self::json_model_middleware::*; diff --git a/server/src/plugins/script_plugin.rs b/server/src/middlewares/script_middleware.rs similarity index 87% rename from server/src/plugins/script_plugin.rs rename to server/src/middlewares/script_middleware.rs index dabe8d5c..37e825af 100644 --- a/server/src/plugins/script_plugin.rs +++ b/server/src/middlewares/script_middleware.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use regex::Regex; use core::Route; -use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult}; +use middleware::{Middleware, MiddlewareChain, TransformFileResult, RbxChangeResult, FileChangeResult}; use rbx::{RbxInstance, RbxValue}; use vfs::VfsItem; @@ -17,16 +17,16 @@ static SERVER_INIT: &'static str = "init.server.lua"; static CLIENT_INIT: &'static str = "init.client.lua"; static MODULE_INIT: &'static str = "init.lua"; -pub struct ScriptPlugin; +pub struct ScriptMiddleware; -impl ScriptPlugin { - pub fn new() -> ScriptPlugin { - ScriptPlugin +impl ScriptMiddleware { + pub fn new() -> ScriptMiddleware { + ScriptMiddleware } } -impl Plugin for ScriptPlugin { - fn transform_file(&self, plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult { +impl Middleware for ScriptMiddleware { + fn transform_file(&self, middlewares: &MiddlewareChain, vfs_item: &VfsItem) -> TransformFileResult { match vfs_item { &VfsItem::File { ref contents, .. } => { let name = vfs_item.name(); @@ -69,10 +69,10 @@ impl Plugin for ScriptPlugin { } }; - let mut rbx_item = match self.transform_file(plugins, init_item) { + let mut rbx_item = match self.transform_file(middlewares, init_item) { TransformFileResult::Value(Some(item)) => item, _ => { - eprintln!("Inconsistency detected in ScriptPlugin!"); + eprintln!("Inconsistency detected in ScriptMiddleware!"); return TransformFileResult::Pass; }, }; @@ -85,7 +85,7 @@ impl Plugin for ScriptPlugin { continue; } - match plugins.transform_file(child_item) { + match middlewares.transform_file(child_item) { Some(child_rbx_item) => { rbx_item.children.push(child_rbx_item); }, diff --git a/server/src/plugins/mod.rs b/server/src/plugins/mod.rs deleted file mode 100644 index 73482635..00000000 --- a/server/src/plugins/mod.rs +++ /dev/null @@ -1,7 +0,0 @@ -mod default_plugin; -mod script_plugin; -mod json_model_plugin; - -pub use self::default_plugin::*; -pub use self::script_plugin::*; -pub use self::json_model_plugin::*; diff --git a/server/src/vfs/vfs_session.rs b/server/src/vfs/vfs_session.rs index efe86ea7..c908795b 100644 --- a/server/src/vfs/vfs_session.rs +++ b/server/src/vfs/vfs_session.rs @@ -4,7 +4,7 @@ use std::io::Read; use std::path::{Path, PathBuf}; use std::time::Instant; -use plugin::PluginChain; +use middleware::MiddlewareChain; use vfs::VfsItem; /// Represents a virtual layer over multiple parts of the filesystem. @@ -24,7 +24,7 @@ pub struct VfsSession { /// When the Vfs was initialized; used for change tracking. start_time: Instant, - plugin_chain: &'static PluginChain, + middleware_chain: &'static MiddlewareChain, } #[derive(Debug, Serialize, Deserialize)] @@ -35,12 +35,12 @@ pub struct VfsChange { } impl VfsSession { - pub fn new(plugin_chain: &'static PluginChain) -> VfsSession { + pub fn new(middleware_chain: &'static MiddlewareChain) -> VfsSession { VfsSession { partitions: HashMap::new(), start_time: Instant::now(), change_history: Vec::new(), - plugin_chain, + middleware_chain, } } @@ -164,7 +164,7 @@ impl VfsSession { /// Register a new change to the filesystem at the given timestamp and VFS /// route. pub fn add_change(&mut self, timestamp: f64, route: Vec) { - match self.plugin_chain.handle_file_change(&route) { + match self.middleware_chain.handle_file_change(&route) { Some(routes) => { for route in routes { self.change_history.push(VfsChange { diff --git a/server/src/web.rs b/server/src/web.rs index dd05b2a4..1f0fec2d 100644 --- a/server/src/web.rs +++ b/server/src/web.rs @@ -8,7 +8,7 @@ use serde_json; use project::Project; use vfs::{VfsSession, VfsChange}; use rbx::RbxInstance; -use plugin::PluginChain; +use middleware::MiddlewareChain; static MAX_BODY_SIZE: usize = 25 * 1024 * 1024; // 25 MiB @@ -117,7 +117,7 @@ where } /// Start the Rojo web server and park our current thread. -pub fn start(config: WebConfig, project: Project, plugin_chain: &'static PluginChain, vfs: Arc>) { +pub fn start(config: WebConfig, project: Project, middleware_chain: &'static MiddlewareChain, vfs: Arc>) { let address = format!("localhost:{}", config.port); let server_id = config.server_id.to_string(); @@ -190,7 +190,7 @@ pub fn start(config: WebConfig, project: Project, plugin_chain: &'static PluginC .iter() .map(|item| { match *item { - Some(ref item) => plugin_chain.transform_file(item), + Some(ref item) => middleware_chain.transform_file(item), None => None, } })