forked from rojo-rbx/rojo
Prototype JsonModelPlugin, untested
Also cleaned up all of the warnings in the other plugin code
This commit is contained in:
@@ -2,6 +2,7 @@ use rbx::RbxItem;
|
|||||||
use vfs::VfsItem;
|
use vfs::VfsItem;
|
||||||
use core::Route;
|
use core::Route;
|
||||||
|
|
||||||
|
// TODO: Add error case?
|
||||||
pub enum TransformFileResult {
|
pub enum TransformFileResult {
|
||||||
Value(Option<RbxItem>),
|
Value(Option<RbxItem>),
|
||||||
Pass,
|
Pass,
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ impl Plugin for DefaultPlugin {
|
|||||||
FileChangeResult::MarkChanged(Some(vec![route.clone()]))
|
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
|
RbxChangeResult::Pass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
52
src/plugins/json_model_plugin.rs
Normal file
52
src/plugins/json_model_plugin.rs
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
mod default_plugin;
|
mod default_plugin;
|
||||||
mod script_plugin;
|
mod script_plugin;
|
||||||
|
mod json_model_plugin;
|
||||||
|
|
||||||
pub use self::default_plugin::*;
|
pub use self::default_plugin::*;
|
||||||
pub use self::script_plugin::*;
|
pub use self::script_plugin::*;
|
||||||
|
pub use self::json_model_plugin::*;
|
||||||
|
|||||||
@@ -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
|
RbxChangeResult::Pass
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user