Plugin: Port reconciler to use rbx_dom_lua

This commit is contained in:
Lucien Greathouse
2019-05-14 14:22:55 -07:00
parent efc569f6ed
commit 28ea625b01
3 changed files with 39 additions and 58 deletions

View File

@@ -1,38 +1,33 @@
local primitiveTypes = {
Bool = true,
Enum = true,
Float32 = true,
Float64 = true,
Int32 = true,
Int64 = true,
String = true,
}
local directConstructors = {
CFrame = CFrame.new,
Color3 = Color3.new,
Color3uint8 = Color3.fromRGB,
Rect = Rect.new,
UDim = UDim.new,
UDim2 = UDim2.new,
Vector2 = Vector2.new,
Vector2int16 = Vector2int16.new,
Vector3 = Vector3.new,
Vector3int16 = Vector3int16.new,
}
local RbxDom = require(script:FindFirstAncestor("Rojo").RbxDom)
local function rojoValueToRobloxValue(value)
if primitiveTypes[value.Type] then
return value.Value
-- TODO: Manually decode this value by looking up its GUID The Rojo server
-- doesn't give us valid ref values yet, so this isn't important yet.
if value.Type == "Ref" then
return nil
end
local constructor = directConstructors[value.Type]
if constructor ~= nil then
return constructor(unpack(value.Value))
-- TODO: Remove this once rbx_dom_weak and rbx_dom_lua agree on encoding
if value.Type == "BinaryString" then
local actualValue = ""
for i = 1, #value.Value do
actualValue = actualValue .. string.char(i)
end
value = {
Type = "BinaryString",
Value = actualValue,
}
end
local errorMessage = ("The Rojo plugin doesn't know how to handle values of type %q yet!"):format(tostring(value.Type))
error(errorMessage)
local success, decodedValue = RbxDom.EncodedValue.decode(value)
if not success then
error(decodedValue, 2)
end
return decodedValue
end
return rojoValueToRobloxValue