mirror of
https://github.com/lune-org/lune.git
synced 2024-12-12 21:10:36 +00:00
Make DataModel class name a shared constant for safety
This commit is contained in:
parent
b0d401421e
commit
1441544426
3 changed files with 16 additions and 14 deletions
|
@ -12,7 +12,7 @@ pub use error::*;
|
||||||
pub use format::*;
|
pub use format::*;
|
||||||
pub use kind::*;
|
pub use kind::*;
|
||||||
|
|
||||||
use crate::instance::Instance;
|
use crate::instance::{data_model, Instance};
|
||||||
|
|
||||||
pub type DocumentResult<T> = Result<T, DocumentError>;
|
pub type DocumentResult<T> = Result<T, DocumentError>;
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ impl Document {
|
||||||
|
|
||||||
let data_model_ref = self
|
let data_model_ref = self
|
||||||
.dom
|
.dom
|
||||||
.insert(dom_root, DomInstanceBuilder::new("DataModel"));
|
.insert(dom_root, DomInstanceBuilder::new(data_model::CLASS_NAME));
|
||||||
let data_model_child_refs = self.dom.root().children().to_vec();
|
let data_model_child_refs = self.dom.root().children().to_vec();
|
||||||
|
|
||||||
for child_ref in data_model_child_refs {
|
for child_ref in data_model_child_refs {
|
||||||
|
@ -233,14 +233,14 @@ impl Document {
|
||||||
|
|
||||||
Will error if the instance is not a DataModel.
|
Will error if the instance is not a DataModel.
|
||||||
*/
|
*/
|
||||||
pub fn from_data_model_instance(instance: Instance) -> DocumentResult<Self> {
|
pub fn from_data_model_instance(i: Instance) -> DocumentResult<Self> {
|
||||||
if instance.get_class_name() != "DataModel" {
|
if i.get_class_name() != data_model::CLASS_NAME {
|
||||||
return Err(DocumentError::FromDataModelInvalidArgs);
|
return Err(DocumentError::FromDataModelInvalidArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut dom = WeakDom::new(DomInstanceBuilder::new("ROOT"));
|
let mut dom = WeakDom::new(DomInstanceBuilder::new("ROOT"));
|
||||||
|
|
||||||
for data_model_child in instance.get_children() {
|
for data_model_child in i.get_children() {
|
||||||
data_model_child.into_external_dom(&mut dom);
|
data_model_child.into_external_dom(&mut dom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,16 +256,16 @@ impl Document {
|
||||||
|
|
||||||
Will error if any of the instances is a DataModel.
|
Will error if any of the instances is a DataModel.
|
||||||
*/
|
*/
|
||||||
pub fn from_instance_array(instances: Vec<Instance>) -> DocumentResult<Self> {
|
pub fn from_instance_array(v: Vec<Instance>) -> DocumentResult<Self> {
|
||||||
for instance in &instances {
|
for i in &v {
|
||||||
if instance.get_class_name() == "DataModel" {
|
if i.get_class_name() == data_model::CLASS_NAME {
|
||||||
return Err(DocumentError::FromInstanceArrayInvalidArgs);
|
return Err(DocumentError::FromInstanceArrayInvalidArgs);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut dom = WeakDom::new(DomInstanceBuilder::new("ROOT"));
|
let mut dom = WeakDom::new(DomInstanceBuilder::new("ROOT"));
|
||||||
|
|
||||||
for instance in instances {
|
for instance in v {
|
||||||
instance.into_external_dom(&mut dom);
|
instance.into_external_dom(&mut dom);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,16 +4,18 @@ use crate::shared::classes::add_class_restricted_method;
|
||||||
|
|
||||||
use super::Instance;
|
use super::Instance;
|
||||||
|
|
||||||
|
pub const CLASS_NAME: &str = "DataModel";
|
||||||
|
|
||||||
pub fn add_methods<'lua, M: LuaUserDataMethods<'lua, Instance>>(methods: &mut M) {
|
pub fn add_methods<'lua, M: LuaUserDataMethods<'lua, Instance>>(methods: &mut M) {
|
||||||
add_class_restricted_method(
|
add_class_restricted_method(
|
||||||
methods,
|
methods,
|
||||||
"DataModel",
|
CLASS_NAME,
|
||||||
"GetService",
|
"GetService",
|
||||||
|_, _, _service_name: String| Ok(()),
|
|_, _, _service_name: String| Ok(()),
|
||||||
);
|
);
|
||||||
add_class_restricted_method(
|
add_class_restricted_method(
|
||||||
methods,
|
methods,
|
||||||
"DataModel",
|
CLASS_NAME,
|
||||||
"FindService",
|
"FindService",
|
||||||
|_, _, _service_name: String| Ok(()),
|
|_, _, _service_name: String| Ok(()),
|
||||||
);
|
);
|
||||||
|
|
|
@ -15,7 +15,7 @@ use crate::{
|
||||||
shared::instance::{class_exists, class_is_a, find_property_info},
|
shared::instance::{class_exists, class_is_a, find_property_info},
|
||||||
};
|
};
|
||||||
|
|
||||||
mod data_model;
|
pub(crate) mod data_model;
|
||||||
|
|
||||||
lazy_static::lazy_static! {
|
lazy_static::lazy_static! {
|
||||||
static ref INTERNAL_DOM: RwLock<WeakDom> =
|
static ref INTERNAL_DOM: RwLock<WeakDom> =
|
||||||
|
@ -468,7 +468,7 @@ impl Instance {
|
||||||
let mut instance_ref = self.dom_ref;
|
let mut instance_ref = self.dom_ref;
|
||||||
|
|
||||||
while let Some(instance) = dom.get_by_ref(instance_ref) {
|
while let Some(instance) = dom.get_by_ref(instance_ref) {
|
||||||
if instance_ref != dom_root && instance.class != "DataModel" {
|
if instance_ref != dom_root && instance.class != data_model::CLASS_NAME {
|
||||||
instance_ref = instance.parent();
|
instance_ref = instance.parent();
|
||||||
parts.push(instance.name.clone());
|
parts.push(instance.name.clone());
|
||||||
} else {
|
} else {
|
||||||
|
@ -702,7 +702,7 @@ impl LuaUserData for Instance {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
"Parent" => {
|
"Parent" => {
|
||||||
if this.get_class_name() == "DataModel" {
|
if this.get_class_name() == data_model::CLASS_NAME {
|
||||||
return Err(LuaError::RuntimeError(format!(
|
return Err(LuaError::RuntimeError(format!(
|
||||||
"Failed to set property '{}' - DataModel can not be reparented",
|
"Failed to set property '{}' - DataModel can not be reparented",
|
||||||
prop_name
|
prop_name
|
||||||
|
|
Loading…
Reference in a new issue