mirror of
https://github.com/lune-org/lune.git
synced 2025-04-19 11:23:57 +01:00
Implement Enum attributes
This commit is contained in:
parent
bb8c4bce82
commit
7a35ce40b4
6 changed files with 31 additions and 6 deletions
|
@ -47,6 +47,7 @@ pub fn ensure_valid_attribute_value(value: &DomValue) -> LuaResult<()> {
|
||||||
| DomType::CFrame
|
| DomType::CFrame
|
||||||
| DomType::Color3
|
| DomType::Color3
|
||||||
| DomType::ColorSequence
|
| DomType::ColorSequence
|
||||||
|
| DomType::EnumItem
|
||||||
| DomType::Float32
|
| DomType::Float32
|
||||||
| DomType::Float64
|
| DomType::Float64
|
||||||
| DomType::Font
|
| DomType::Font
|
||||||
|
|
|
@ -200,6 +200,7 @@ impl<'lua> DomValueToLua<'lua> for LuaAnyUserData<'lua> {
|
||||||
DomValue::Color3(value) => dom_to_userdata!(lua, value => Color3),
|
DomValue::Color3(value) => dom_to_userdata!(lua, value => Color3),
|
||||||
DomValue::Color3uint8(value) => dom_to_userdata!(lua, value => Color3),
|
DomValue::Color3uint8(value) => dom_to_userdata!(lua, value => Color3),
|
||||||
DomValue::ColorSequence(value) => dom_to_userdata!(lua, value => ColorSequence),
|
DomValue::ColorSequence(value) => dom_to_userdata!(lua, value => ColorSequence),
|
||||||
|
DomValue::EnumItem(value) => dom_to_userdata!(lua, value => EnumItem),
|
||||||
DomValue::Faces(value) => dom_to_userdata!(lua, value => Faces),
|
DomValue::Faces(value) => dom_to_userdata!(lua, value => Faces),
|
||||||
DomValue::Font(value) => dom_to_userdata!(lua, value => Font),
|
DomValue::Font(value) => dom_to_userdata!(lua, value => Font),
|
||||||
DomValue::NumberRange(value) => dom_to_userdata!(lua, value => NumberRange),
|
DomValue::NumberRange(value) => dom_to_userdata!(lua, value => NumberRange),
|
||||||
|
@ -256,7 +257,7 @@ impl<'lua> LuaToDomValue<'lua> for LuaAnyUserData<'lua> {
|
||||||
DomType::Color3 => userdata_to_dom!(self as Color3 => dom::Color3),
|
DomType::Color3 => userdata_to_dom!(self as Color3 => dom::Color3),
|
||||||
DomType::Color3uint8 => userdata_to_dom!(self as Color3 => dom::Color3uint8),
|
DomType::Color3uint8 => userdata_to_dom!(self as Color3 => dom::Color3uint8),
|
||||||
DomType::ColorSequence => userdata_to_dom!(self as ColorSequence => dom::ColorSequence),
|
DomType::ColorSequence => userdata_to_dom!(self as ColorSequence => dom::ColorSequence),
|
||||||
DomType::Enum => userdata_to_dom!(self as EnumItem => dom::Enum),
|
DomType::EnumItem => userdata_to_dom!(self as EnumItem => dom::EnumItem),
|
||||||
DomType::Faces => userdata_to_dom!(self as Faces => dom::Faces),
|
DomType::Faces => userdata_to_dom!(self as Faces => dom::Faces),
|
||||||
DomType::Font => userdata_to_dom!(self as Font => dom::Font),
|
DomType::Font => userdata_to_dom!(self as Font => dom::Font),
|
||||||
DomType::NumberRange => userdata_to_dom!(self as NumberRange => dom::NumberRange),
|
DomType::NumberRange => userdata_to_dom!(self as NumberRange => dom::NumberRange),
|
||||||
|
@ -314,7 +315,8 @@ impl<'lua> LuaToDomValue<'lua> for LuaAnyUserData<'lua> {
|
||||||
value if value.is::<CFrame>() => userdata_to_dom!(value as CFrame => dom::CFrame),
|
value if value.is::<CFrame>() => userdata_to_dom!(value as CFrame => dom::CFrame),
|
||||||
value if value.is::<Color3>() => userdata_to_dom!(value as Color3 => dom::Color3),
|
value if value.is::<Color3>() => userdata_to_dom!(value as Color3 => dom::Color3),
|
||||||
value if value.is::<ColorSequence>() => userdata_to_dom!(value as ColorSequence => dom::ColorSequence),
|
value if value.is::<ColorSequence>() => userdata_to_dom!(value as ColorSequence => dom::ColorSequence),
|
||||||
value if value.is::<Enum>() => userdata_to_dom!(value as EnumItem => dom::Enum),
|
value if value.is::<Enum>() => userdata_to_dom!(value as EnumItem => dom::EnumItem),
|
||||||
|
value if value.is::<EnumItem>() => userdata_to_dom!(value as EnumItem => dom::EnumItem),
|
||||||
value if value.is::<Faces>() => userdata_to_dom!(value as Faces => dom::Faces),
|
value if value.is::<Faces>() => userdata_to_dom!(value as Faces => dom::Faces),
|
||||||
value if value.is::<Font>() => userdata_to_dom!(value as Font => dom::Font),
|
value if value.is::<Font>() => userdata_to_dom!(value as Font => dom::Font),
|
||||||
value if value.is::<Instance>() => userdata_to_dom!(value as Instance => dom::Ref),
|
value if value.is::<Instance>() => userdata_to_dom!(value as Instance => dom::Ref),
|
||||||
|
|
|
@ -20,6 +20,7 @@ impl DomValueExt for DomType {
|
||||||
ColorSequence => "ColorSequence",
|
ColorSequence => "ColorSequence",
|
||||||
Content => "Content",
|
Content => "Content",
|
||||||
Enum => "Enum",
|
Enum => "Enum",
|
||||||
|
EnumItem => "EnumItem",
|
||||||
Faces => "Faces",
|
Faces => "Faces",
|
||||||
Float32 => "Float32",
|
Float32 => "Float32",
|
||||||
Float64 => "Float64",
|
Float64 => "Float64",
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
use core::fmt;
|
use core::fmt;
|
||||||
|
|
||||||
use mlua::prelude::*;
|
use mlua::prelude::*;
|
||||||
use rbx_dom_weak::types::Enum as DomEnum;
|
use rbx_dom_weak::types::EnumItem as DomEnumItem;
|
||||||
|
|
||||||
use super::{super::*, Enum};
|
use super::{super::*, Enum};
|
||||||
|
|
||||||
|
@ -100,8 +100,19 @@ impl PartialEq for EnumItem {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<EnumItem> for DomEnum {
|
impl From<EnumItem> for DomEnumItem {
|
||||||
fn from(v: EnumItem) -> Self {
|
fn from(v: EnumItem) -> Self {
|
||||||
DomEnum::from_u32(v.value)
|
DomEnumItem {
|
||||||
|
ty: v.parent.desc.name.to_string(),
|
||||||
|
value: v.value,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<DomEnumItem> for EnumItem {
|
||||||
|
fn from(value: DomEnumItem) -> Self {
|
||||||
|
println!("dom enum item: {value:?}");
|
||||||
|
EnumItem::from_enum_name_and_value(value.ty, value.value)
|
||||||
|
.expect("cannot convert rbx_type::EnumItem with unknown type into EnumItem")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -331,7 +331,7 @@ fn instance_property_set<'lua>(
|
||||||
if let Some(enum_name) = info.enum_name {
|
if let Some(enum_name) = info.enum_name {
|
||||||
match LuaUserDataRef::<EnumItem>::from_lua(prop_value, lua) {
|
match LuaUserDataRef::<EnumItem>::from_lua(prop_value, lua) {
|
||||||
Ok(given_enum) if given_enum.parent.desc.name == enum_name => {
|
Ok(given_enum) if given_enum.parent.desc.name == enum_name => {
|
||||||
this.set_property(prop_name, DomValue::Enum((*given_enum).clone().into()));
|
this.set_property(prop_name, DomValue::EnumItem((*given_enum).clone().into()));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
Ok(given_enum) => Err(LuaError::RuntimeError(format!(
|
Ok(given_enum) => Err(LuaError::RuntimeError(format!(
|
||||||
|
|
|
@ -16,6 +16,7 @@ local UDim2 = roblox.UDim2
|
||||||
local Vector2 = roblox.Vector2
|
local Vector2 = roblox.Vector2
|
||||||
local Vector3 = roblox.Vector3
|
local Vector3 = roblox.Vector3
|
||||||
local Instance = roblox.Instance
|
local Instance = roblox.Instance
|
||||||
|
local Enum = roblox.Enum
|
||||||
|
|
||||||
local modelFile = fs.readFile("tests/roblox/rbx-test-files/models/attributes/binary.rbxm")
|
local modelFile = fs.readFile("tests/roblox/rbx-test-files/models/attributes/binary.rbxm")
|
||||||
local model = roblox.deserializeModel(modelFile)[1]
|
local model = roblox.deserializeModel(modelFile)[1]
|
||||||
|
@ -114,3 +115,12 @@ model.Parent = game
|
||||||
local placeFile = roblox.serializePlace(game)
|
local placeFile = roblox.serializePlace(game)
|
||||||
fs.writeDir("bin/roblox")
|
fs.writeDir("bin/roblox")
|
||||||
fs.writeFile("bin/roblox/attributes.rbxl", placeFile)
|
fs.writeFile("bin/roblox/attributes.rbxl", placeFile)
|
||||||
|
|
||||||
|
local enum_attr = Instance.new("Folder")
|
||||||
|
enum_attr:SetAttribute("Foo", Enum.NormalId.Front)
|
||||||
|
assert(enum_attr:GetAttribute("Foo") == Enum.NormalId.Front)
|
||||||
|
|
||||||
|
local enum_attr_ser = roblox.serializeModel({ enum_attr })
|
||||||
|
local enum_attr_de = roblox.deserializeModel(enum_attr_ser)
|
||||||
|
|
||||||
|
assert(enum_attr_de[1]:GetAttribute("Foo") == Enum.NormalId.Front)
|
||||||
|
|
Loading…
Add table
Reference in a new issue