Prototype JsonModelPlugin, untested

Also cleaned up all of the warnings in the other plugin code
This commit is contained in:
Lucien Greathouse
2017-12-21 17:09:32 -08:00
parent 5e98cbe68f
commit fe240ed577
5 changed files with 57 additions and 2 deletions

View File

@@ -2,6 +2,7 @@ use rbx::RbxItem;
use vfs::VfsItem;
use core::Route;
// TODO: Add error case?
pub enum TransformFileResult {
Value(Option<RbxItem>),
Pass,

View File

@@ -59,7 +59,7 @@ impl Plugin for DefaultPlugin {
FileChangeResult::MarkChanged(Some(vec![route.clone()]))
}
fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> RbxChangeResult {
fn handle_rbx_change(&self, _route: &Route, _rbx_item: &RbxItem) -> RbxChangeResult {
RbxChangeResult::Pass
}
}

View File

@@ -0,0 +1,52 @@
use regex::Regex;
use serde_json;
use core::Route;
use plugin::{Plugin, PluginChain, TransformFileResult, RbxChangeResult, FileChangeResult};
use rbx::{RbxItem, RbxValue};
use vfs::VfsItem;
lazy_static! {
static ref JSON_MODEL_PATTERN: Regex = Regex::new(r"^(.*?)\.model\.json$").unwrap();
}
pub struct JsonModelPlugin;
impl JsonModelPlugin {
pub fn new() -> JsonModelPlugin {
JsonModelPlugin
}
}
impl Plugin for JsonModelPlugin {
fn transform_file(&self, _plugins: &PluginChain, vfs_item: &VfsItem) -> TransformFileResult {
match vfs_item {
&VfsItem::File { ref contents, ref name } => {
let rbx_name = match JSON_MODEL_PATTERN.captures(name) {
Some(captures) => captures.get(1).unwrap().as_str().to_string(),
None => return TransformFileResult::Pass,
};
let mut rbx_item: RbxItem = match serde_json::from_str(contents) {
Ok(v) => v,
Err(_) => return TransformFileResult::Pass, // This should be an error in the future
};
rbx_item.properties.insert("Name".to_string(), RbxValue::String {
value: rbx_name,
});
TransformFileResult::Value(Some(rbx_item))
},
&VfsItem::Dir { .. } => TransformFileResult::Pass,
}
}
fn handle_file_change(&self, _route: &Route) -> FileChangeResult {
FileChangeResult::Pass
}
fn handle_rbx_change(&self, _route: &Route, _rbx_item: &RbxItem) -> RbxChangeResult {
RbxChangeResult::Pass
}
}

View File

@@ -1,5 +1,7 @@
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::*;

View File

@@ -115,7 +115,7 @@ impl Plugin for ScriptPlugin {
}
}
fn handle_rbx_change(&self, route: &Route, rbx_item: &RbxItem) -> RbxChangeResult {
fn handle_rbx_change(&self, _route: &Route, _rbx_item: &RbxItem) -> RbxChangeResult {
RbxChangeResult::Pass
}
}