Implement PluginChain

This commit is contained in:
Lucien Greathouse
2017-12-13 23:40:32 -08:00
parent 21e9625c36
commit 01325c8c7e
3 changed files with 48 additions and 19 deletions

View File

@@ -7,5 +7,28 @@ pub enum PluginResult {
}
pub trait Plugin {
fn transform(item: &VfsItem) -> PluginResult;
fn transform_file(&self, plugins: &PluginChain, vfs_item: &VfsItem) -> PluginResult;
}
pub struct PluginChain {
plugins: Vec<Box<Plugin + Send>>,
}
impl PluginChain {
pub fn new(plugins: Vec<Box<Plugin + Send>>) -> PluginChain {
PluginChain {
plugins,
}
}
pub fn transform_file(&self, vfs_item: &VfsItem) -> Option<RbxItem> {
for plugin in &self.plugins {
match plugin.transform_file(self, vfs_item) {
PluginResult::Value(rbx_item) => return rbx_item,
PluginResult::Pass => {},
}
}
None
}
}