Use new rbx_dom_lua API

This commit is contained in:
Lucien Greathouse
2019-05-30 18:37:56 -07:00
parent 4c263bbb3e
commit 075b6cca30
2 changed files with 23 additions and 21 deletions

View File

@@ -3,30 +3,32 @@ local RbxDom = require(script:FindFirstAncestor("Rojo").RbxDom)
--[[ --[[
Attempts to set a property on the given instance. Attempts to set a property on the given instance.
]] ]]
local function setCanonicalProperty(instance, key, value) local function setCanonicalProperty(instance, propertyName, value)
-- If we don't have permissions to access this value at all, we can skip it. local descriptor = RbxDom.findCanonicalPropertyDescriptor(instance.ClassName, propertyName)
local readSuccess, existingValue = RbxDom.readProperty(instance, key)
if not readSuccess then -- We can skip unknown properties; they're not likely reflected to Lua.
if existingValue.kind == RbxDom.Error.Kind.UnknownProperty --
or existingValue.kind == RbxDom.Error.Kind.PropertyNotReadable then -- A good example of a property like this is `Model.ModelInPrimary`, which
-- this is fine -- is serialized but not reflected to Lua.
return false if descriptor == nil then
return false, "unknown property"
end end
if descriptor.scriptability == "None" or descriptor.scriptability == "Read" then
return false, "unwritable property"
end
local success, err = descriptor:write(instance, value)
if not success then
-- If we don't have permission to write a property, we just silently -- If we don't have permission to write a property, we just silently
-- ignore it. -- ignore it.
if existingValue.kind == RbxDom.Error.Kind.Roblox and existingValue.extra:find("lacking permission") then if err.kind == RbxDom.Error.Kind.Roblox and err.extra:find("lacking permission") then
return false return false, "permission error"
end end
error(("Invalid property %s on class %s: %s"):format(tostring(key), instance.ClassName, tostring(existingValue)), 2) local message = ("Invalid property %s.%s: %s"):format(descriptor.className, descriptor.name, tostring(err))
end error(message, 2)
local writeSuccess, err = RbxDom.writeProperty(instance, key, value)
if not writeSuccess then
error(("Cannot set property %s on class %s: %s"):format(tostring(key), instance.ClassName, tostring(err)), 2)
end end
return true return true