diff --git a/src/snapshot_middleware/context.rs b/src/snapshot_middleware/context.rs index f423c027..b10e7192 100644 --- a/src/snapshot_middleware/context.rs +++ b/src/snapshot_middleware/context.rs @@ -1,7 +1,16 @@ +#[derive(Debug)] pub struct InstanceSnapshotContext { /// Empty struct that will be used later to fill out required Lua state for /// user plugins. pub plugin_context: Option<()>, } +impl Default for InstanceSnapshotContext { + fn default() -> Self { + Self { + plugin_context: None, + } + } +} + pub struct ImfsSnapshotContext; diff --git a/src/snapshot_middleware/csv.rs b/src/snapshot_middleware/csv.rs index 06727820..28876634 100644 --- a/src/snapshot_middleware/csv.rs +++ b/src/snapshot_middleware/csv.rs @@ -10,6 +10,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, meta_file::AdjacentMetadata, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, util::match_file_name, @@ -19,6 +20,7 @@ pub struct SnapshotCsv; impl SnapshotMiddleware for SnapshotCsv { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -159,7 +161,10 @@ Ack,Ack!,,An exclamation of despair,¡Ay!"#, imfs.debug_load_snapshot("/foo.csv", file); let entry = imfs.get("/foo.csv").unwrap(); - let instance_snapshot = SnapshotCsv::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotCsv::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -178,7 +183,10 @@ Ack,Ack!,,An exclamation of despair,¡Ay!"#, imfs.debug_load_snapshot("/foo.meta.json", meta); let entry = imfs.get("/foo.csv").unwrap(); - let instance_snapshot = SnapshotCsv::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotCsv::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } diff --git a/src/snapshot_middleware/dir.rs b/src/snapshot_middleware/dir.rs index 970cc92b..ba499d26 100644 --- a/src/snapshot_middleware/dir.rs +++ b/src/snapshot_middleware/dir.rs @@ -8,6 +8,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, error::SnapshotError, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, snapshot_from_imfs, snapshot_from_instance, @@ -17,6 +18,7 @@ pub struct SnapshotDir; impl SnapshotMiddleware for SnapshotDir { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -94,7 +96,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotDir::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotDir::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -109,7 +114,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotDir::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotDir::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } diff --git a/src/snapshot_middleware/json_model.rs b/src/snapshot_middleware/json_model.rs index fbee2418..23631439 100644 --- a/src/snapshot_middleware/json_model.rs +++ b/src/snapshot_middleware/json_model.rs @@ -10,6 +10,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, util::match_file_name, }; @@ -18,6 +19,7 @@ pub struct SnapshotJsonModel; impl SnapshotMiddleware for SnapshotJsonModel { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -161,9 +163,10 @@ mod test { imfs.debug_load_snapshot("/foo.model.json", file); let entry = imfs.get("/foo.model.json").unwrap(); - let instance_snapshot = SnapshotJsonModel::from_imfs(&mut imfs, &entry) - .unwrap() - .unwrap(); + let instance_snapshot = + SnapshotJsonModel::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } diff --git a/src/snapshot_middleware/lua.rs b/src/snapshot_middleware/lua.rs index 4c0655cc..fc7da815 100644 --- a/src/snapshot_middleware/lua.rs +++ b/src/snapshot_middleware/lua.rs @@ -9,6 +9,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, dir::SnapshotDir, meta_file::AdjacentMetadata, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, @@ -19,6 +20,7 @@ pub struct SnapshotLua; impl SnapshotMiddleware for SnapshotLua { fn from_imfs( + context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -34,13 +36,13 @@ impl SnapshotMiddleware for SnapshotLua { if entry.is_file() { snapshot_lua_file(imfs, entry) } else { - if let Some(snapshot) = snapshot_init(imfs, entry, "init.lua")? { + if let Some(snapshot) = snapshot_init(context, imfs, entry, "init.lua")? { // An `init.lua` file turns its parent into a ModuleScript Ok(Some(snapshot)) - } else if let Some(snapshot) = snapshot_init(imfs, entry, "init.server.lua")? { + } else if let Some(snapshot) = snapshot_init(context, imfs, entry, "init.server.lua")? { // An `init.server.lua` file turns its parent into a Script Ok(Some(snapshot)) - } else if let Some(snapshot) = snapshot_init(imfs, entry, "init.client.lua")? { + } else if let Some(snapshot) = snapshot_init(context, imfs, entry, "init.client.lua")? { // An `init.client.lua` file turns its parent into a LocalScript Ok(Some(snapshot)) } else { @@ -114,6 +116,7 @@ fn snapshot_lua_file( /// Scripts named `init.lua`, `init.server.lua`, or `init.client.lua` usurp /// their parents, which acts similarly to `__init__.py` from the Python world. fn snapshot_init( + context: &InstanceSnapshotContext, imfs: &mut Imfs, folder_entry: &ImfsEntry, init_name: &str, @@ -121,7 +124,7 @@ fn snapshot_init( let init_path = folder_entry.path().join(init_name); if let Some(init_entry) = imfs.get(init_path).with_not_found()? { - if let Some(dir_snapshot) = SnapshotDir::from_imfs(imfs, folder_entry)? { + if let Some(dir_snapshot) = SnapshotDir::from_imfs(context, imfs, folder_entry)? { if let Some(mut init_snapshot) = snapshot_lua_file(imfs, &init_entry)? { init_snapshot.name = dir_snapshot.name; init_snapshot.children = dir_snapshot.children; @@ -152,7 +155,10 @@ mod test { imfs.debug_load_snapshot("/foo.lua", file); let entry = imfs.get("/foo.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -165,7 +171,10 @@ mod test { imfs.debug_load_snapshot("/foo.server.lua", file); let entry = imfs.get("/foo.server.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -178,7 +187,10 @@ mod test { imfs.debug_load_snapshot("/foo.client.lua", file); let entry = imfs.get("/foo.client.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -199,7 +211,10 @@ mod test { imfs.debug_load_snapshot("/foo.meta.json", meta); let entry = imfs.get("/foo.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -220,7 +235,10 @@ mod test { imfs.debug_load_snapshot("/foo.meta.json", meta); let entry = imfs.get("/foo.server.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); } @@ -243,7 +261,10 @@ mod test { imfs.debug_load_snapshot("/bar.meta.json", meta); let entry = imfs.get("/bar.server.lua").unwrap(); - let instance_snapshot = SnapshotLua::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotLua::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); with_settings!({ sort_maps => true }, { assert_yaml_snapshot!(instance_snapshot); diff --git a/src/snapshot_middleware/middleware.rs b/src/snapshot_middleware/middleware.rs index 71ed5e9a..5b4d96c8 100644 --- a/src/snapshot_middleware/middleware.rs +++ b/src/snapshot_middleware/middleware.rs @@ -7,13 +7,14 @@ use crate::{ snapshot::InstanceSnapshot, }; -use super::error::SnapshotError; +use super::{context::InstanceSnapshotContext, error::SnapshotError}; pub type SnapshotInstanceResult<'a> = Result>, SnapshotError>; pub type SnapshotFileResult = Option<(String, ImfsSnapshot)>; pub trait SnapshotMiddleware { fn from_imfs( + context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static>; diff --git a/src/snapshot_middleware/mod.rs b/src/snapshot_middleware/mod.rs index a31fdb10..dae68d5a 100644 --- a/src/snapshot_middleware/mod.rs +++ b/src/snapshot_middleware/mod.rs @@ -23,6 +23,7 @@ pub use self::error::*; use rbx_dom_weak::{RbxId, RbxTree}; use self::{ + context::InstanceSnapshotContext, csv::SnapshotCsv, dir::SnapshotDir, json_model::SnapshotJsonModel, @@ -43,10 +44,12 @@ macro_rules! middlewares { imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { + let context = InstanceSnapshotContext::default(); + $( log::trace!("trying middleware {} on {}", stringify!($middleware), entry.path().display()); - if let Some(snapshot) = $middleware::from_imfs(imfs, entry)? { + if let Some(snapshot) = $middleware::from_imfs(&context, imfs, entry)? { log::trace!("middleware {} success on {}", stringify!($middleware), entry.path().display()); return Ok(Some(snapshot)); } diff --git a/src/snapshot_middleware/project.rs b/src/snapshot_middleware/project.rs index 3c1d296a..7266c398 100644 --- a/src/snapshot_middleware/project.rs +++ b/src/snapshot_middleware/project.rs @@ -9,6 +9,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, error::SnapshotError, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, snapshot_from_imfs, @@ -21,6 +22,7 @@ pub struct SnapshotProject; impl SnapshotMiddleware for SnapshotProject { fn from_imfs( + context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -31,7 +33,7 @@ impl SnapshotMiddleware for SnapshotProject { // TODO: Do we need to muck with the relevant paths if we're a // project file within a folder? Should the folder path be the // relevant path instead of the project file path? - Some(entry) => return SnapshotProject::from_imfs(imfs, &entry), + Some(entry) => return SnapshotProject::from_imfs(context, imfs, &entry), None => return Ok(None), } } @@ -209,9 +211,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -235,9 +238,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo/hello.project.json").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -267,9 +271,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -296,9 +301,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -326,9 +332,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -353,9 +360,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -387,9 +395,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -425,9 +434,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } @@ -468,9 +478,10 @@ mod test { imfs.debug_load_snapshot("/foo", dir); let entry = imfs.get("/foo").unwrap(); - let instance_snapshot = SnapshotProject::from_imfs(&mut imfs, &entry) - .expect("snapshot error") - .expect("snapshot returned no instances"); + let instance_snapshot = + SnapshotProject::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .expect("snapshot error") + .expect("snapshot returned no instances"); assert_yaml_snapshot!(instance_snapshot); } diff --git a/src/snapshot_middleware/rbxlx.rs b/src/snapshot_middleware/rbxlx.rs index bc88c979..f5e610df 100644 --- a/src/snapshot_middleware/rbxlx.rs +++ b/src/snapshot_middleware/rbxlx.rs @@ -6,6 +6,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, util::match_file_name, }; @@ -14,6 +15,7 @@ pub struct SnapshotRbxlx; impl SnapshotMiddleware for SnapshotRbxlx { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { diff --git a/src/snapshot_middleware/rbxm.rs b/src/snapshot_middleware/rbxm.rs index 1723757e..2a1d910a 100644 --- a/src/snapshot_middleware/rbxm.rs +++ b/src/snapshot_middleware/rbxm.rs @@ -8,6 +8,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, util::match_file_name, }; @@ -16,6 +17,7 @@ pub struct SnapshotRbxm; impl SnapshotMiddleware for SnapshotRbxm { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -68,7 +70,10 @@ mod test { imfs.debug_load_snapshot("/foo.rbxm", file); let entry = imfs.get("/foo.rbxm").unwrap(); - let instance_snapshot = SnapshotRbxm::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotRbxm::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_eq!(instance_snapshot.name, "foo"); assert_eq!(instance_snapshot.class_name, "Folder"); diff --git a/src/snapshot_middleware/rbxmx.rs b/src/snapshot_middleware/rbxmx.rs index e3a20a2b..8e29cd9c 100644 --- a/src/snapshot_middleware/rbxmx.rs +++ b/src/snapshot_middleware/rbxmx.rs @@ -6,6 +6,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, middleware::{SnapshotInstanceResult, SnapshotMiddleware}, util::match_file_name, }; @@ -14,6 +15,7 @@ pub struct SnapshotRbxmx; impl SnapshotMiddleware for SnapshotRbxmx { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -74,9 +76,10 @@ mod test { imfs.debug_load_snapshot("/foo.rbxmx", file); let entry = imfs.get("/foo.rbxmx").unwrap(); - let instance_snapshot = SnapshotRbxmx::from_imfs(&mut imfs, &entry) - .unwrap() - .unwrap(); + let instance_snapshot = + SnapshotRbxmx::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_eq!(instance_snapshot.name, "foo"); assert_eq!(instance_snapshot.class_name, "Folder"); diff --git a/src/snapshot_middleware/txt.rs b/src/snapshot_middleware/txt.rs index 65abb657..4d952041 100644 --- a/src/snapshot_middleware/txt.rs +++ b/src/snapshot_middleware/txt.rs @@ -9,6 +9,7 @@ use crate::{ }; use super::{ + context::InstanceSnapshotContext, error::SnapshotError, meta_file::AdjacentMetadata, middleware::{SnapshotFileResult, SnapshotInstanceResult, SnapshotMiddleware}, @@ -19,6 +20,7 @@ pub struct SnapshotTxt; impl SnapshotMiddleware for SnapshotTxt { fn from_imfs( + _context: &InstanceSnapshotContext, imfs: &mut Imfs, entry: &ImfsEntry, ) -> SnapshotInstanceResult<'static> { @@ -114,7 +116,10 @@ mod test { imfs.debug_load_snapshot("/foo.txt", file); let entry = imfs.get("/foo.txt").unwrap(); - let instance_snapshot = SnapshotTxt::from_imfs(&mut imfs, &entry).unwrap().unwrap(); + let instance_snapshot = + SnapshotTxt::from_imfs(&InstanceSnapshotContext::default(), &mut imfs, &entry) + .unwrap() + .unwrap(); assert_yaml_snapshot!(instance_snapshot); }