diff --git a/src/plugin.rs b/src/plugin.rs index 3686ffb8..2a6e34a6 100644 --- a/src/plugin.rs +++ b/src/plugin.rs @@ -7,6 +7,11 @@ pub enum TransformFileResult { Pass, } +pub enum RbxChangeResult { + Write(Option), + Pass, +} + pub enum FileChangeResult { MarkChanged(Option>), Pass, @@ -14,6 +19,7 @@ pub enum FileChangeResult { pub trait Plugin { fn transform_file(&self, plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult; + fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> RbxChangeResult; fn handle_file_change(&self, route: &Route) -> FileChangeResult; } @@ -39,6 +45,17 @@ impl PluginChain { None } + pub fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> Option { + for plugin in &self.plugins { + match plugin.handle_rbx_change(route, rbx_item) { + RbxChangeResult::Write(vfs_item) => return vfs_item, + RbxChangeResult::Pass => {}, + } + } + + None + } + pub fn handle_file_change(&self, route: &Route) -> Option> { for plugin in &self.plugins { match plugin.handle_file_change(route) { diff --git a/src/plugins/default_plugin.rs b/src/plugins/default_plugin.rs index 11bab5a9..b9503877 100644 --- a/src/plugins/default_plugin.rs +++ b/src/plugins/default_plugin.rs @@ -1,7 +1,7 @@ use std::collections::HashMap; use core::Route; -use plugin::{Plugin, PluginChain, TransformFileResult, FileChangeResult}; +use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult}; use rbx::{RbxItem, RbxValue}; use vfs::VfsItem; @@ -58,4 +58,8 @@ impl Plugin for DefaultPlugin { fn handle_file_change(&self, route: &Route) -> FileChangeResult { FileChangeResult::MarkChanged(Some(vec![route.clone()])) } + + fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> RbxChangeResult { + RbxChangeResult::Pass + } } diff --git a/src/plugins/script_plugin.rs b/src/plugins/script_plugin.rs index a6932392..70cdc059 100644 --- a/src/plugins/script_plugin.rs +++ b/src/plugins/script_plugin.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use regex::Regex; use core::Route; -use plugin::{Plugin, PluginChain, TransformFileResult, FileChangeResult}; +use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult}; use rbx::{RbxItem, RbxValue}; use vfs::VfsItem; @@ -114,4 +114,8 @@ impl Plugin for ScriptPlugin { FileChangeResult::Pass } } + + fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> RbxChangeResult { + RbxChangeResult::Pass + } }