From a0710d9b3fe0ade5a3b381c146f59736dddbfc42 Mon Sep 17 00:00:00 2001 From: Micah Date: Wed, 2 Apr 2025 16:47:13 -0700 Subject: [PATCH] Implement conversions to and from Content --- .../lune-roblox/src/datatypes/conversion.rs | 6 ++++-- .../src/datatypes/types/content.rs | 19 ++++++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/crates/lune-roblox/src/datatypes/conversion.rs b/crates/lune-roblox/src/datatypes/conversion.rs index f4e85fb..dbd4249 100644 --- a/crates/lune-roblox/src/datatypes/conversion.rs +++ b/crates/lune-roblox/src/datatypes/conversion.rs @@ -104,8 +104,8 @@ impl<'lua> LuaToDomValue<'lua> for LuaValue<'lua> { (LuaValue::String(s), DomType::BinaryString) => { Ok(DomValue::BinaryString(s.as_ref().into())) } - (LuaValue::String(s), DomType::Content) => { - Ok(DomValue::Content(s.to_str()?.to_string().into())) + (LuaValue::String(s), DomType::ContentId) => { + Ok(DomValue::ContentId(s.to_str()?.to_string().into())) } // NOTE: Some values are either optional or default and we @@ -200,6 +200,7 @@ impl<'lua> DomValueToLua<'lua> for LuaAnyUserData<'lua> { DomValue::Color3(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::Content(value) => dom_to_userdata!(lua, value => Content), DomValue::Faces(value) => dom_to_userdata!(lua, value => Faces), DomValue::Font(value) => dom_to_userdata!(lua, value => Font), DomValue::NumberRange(value) => dom_to_userdata!(lua, value => NumberRange), @@ -256,6 +257,7 @@ impl<'lua> LuaToDomValue<'lua> for LuaAnyUserData<'lua> { DomType::Color3 => userdata_to_dom!(self as Color3 => dom::Color3), DomType::Color3uint8 => userdata_to_dom!(self as Color3 => dom::Color3uint8), DomType::ColorSequence => userdata_to_dom!(self as ColorSequence => dom::ColorSequence), + DomType::Content => userdata_to_dom!(self as Content => dom::Content), DomType::Enum => userdata_to_dom!(self as EnumItem => dom::Enum), DomType::Faces => userdata_to_dom!(self as Faces => dom::Faces), DomType::Font => userdata_to_dom!(self as Font => dom::Font), diff --git a/crates/lune-roblox/src/datatypes/types/content.rs b/crates/lune-roblox/src/datatypes/types/content.rs index 61658e4..226ea92 100644 --- a/crates/lune-roblox/src/datatypes/types/content.rs +++ b/crates/lune-roblox/src/datatypes/types/content.rs @@ -102,10 +102,19 @@ impl fmt::Display for Content { } } -impl TryFrom for Content { - type Error = LuaError; - - fn try_from(value: DomContent) -> Result { - Ok(Self(value.value().clone())) +impl From for Content { + fn from(value: DomContent) -> Self { + Self(value.value().clone()) + } +} + +impl From for DomContent { + fn from(value: Content) -> Self { + match value.0 { + ContentType::None => Self::none(), + ContentType::Uri(uri) => Self::from_uri(uri), + ContentType::Object(referent) => Self::from_referent(referent), + other => unimplemented!("unknown variant of ContentType: {other:?}"), + } } }