forked from rojo-rbx/rojo
Plugin: Port reconciler to use rbx_dom_lua
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user