summaryrefslogtreecommitdiff
path: root/xmake/core/base/serialize.lua
diff options
context:
space:
mode:
authorOpportunityLiu <[email protected]>2019-07-27 16:27:30 +0800
committerOpportunityLiu <[email protected]>2019-07-28 14:45:01 +0800
commit5f72124406a72da23a816b73c5fa0bd5ec404e57 (patch)
tree39e17d6064cf4b742433fe69a2e31406a0f059e4 /xmake/core/base/serialize.lua
parentbfdfbe9b260824a9254a7be7bb7ffe9f0e9cf3d5 (diff)
fix serialize
Diffstat (limited to 'xmake/core/base/serialize.lua')
-rw-r--r--xmake/core/base/serialize.lua58
1 files changed, 34 insertions, 24 deletions
diff --git a/xmake/core/base/serialize.lua b/xmake/core/base/serialize.lua
index 1a9294a09..f41b1de2f 100644
--- a/xmake/core/base/serialize.lua
+++ b/xmake/core/base/serialize.lua
@@ -223,6 +223,35 @@ function serialize._make(object, opt)
end
end
+function serialize._generateindent(indent)
+
+ -- init indent, from nil, boolean, number or string to false or string
+ if not indent then
+ -- no indent
+ return false
+ elseif type(indent) == "boolean" then -- true
+ -- 4 spaces
+ return " "
+ elseif type(indent) == "number" then
+ if indent < 0 then
+ return false
+ elseif indent > 20 then
+ return nil, "invalid opt.indent, too large"
+ else
+ -- indent spaces
+ return string.rep(" ", indent)
+ end
+ elseif type(indent) == "string" then
+ -- only whitespaces allowed
+ if not (indent:trim() == "") then
+ return nil, "invalid opt.indent, only whitespaces are accepted"
+ end
+ return indent
+ else
+ return nil, "invalid opt.indent, should be boolean, number or string"
+ end
+end
+
-- serialize to string from the given object
--
-- @param opt serialize options
@@ -242,30 +271,11 @@ function serialize.save(object, opt)
if opt.binary == nil then opt.binary = false end
if opt.indent == nil then opt.indent = true end
- -- init indent, from nil, boolean, number or string to false or string
- if not opt.indent then
- -- no indent
- opt.indent = false
- elseif type(opt.indent) == "boolean" then -- true
- -- 4 spaces
- opt.indent = " "
- elseif type(opt.indent) == "number" then
- if opt.indent < 0 then
- opt.indent = false
- elseif opt.indent > 20 then
- return nil, "invalid opt.indent, too large"
- else
- -- opt.indent spaces
- opt.indent = string.rep(" ", opt.indent)
- end
- elseif type(opt.indent) == "string" then
- -- only whitespaces allowed
- if not opt.indent:match("^%s+$") then
- return nil, "invalid opt.indent, only whitespaces are accepted"
- end
- else
- return nil, "invalid opt.indent, should be boolean, number or string"
+ local indent, ierrors = serialize._generateindent(opt.indent)
+ if ierrors then
+ return nil, ierrors
end
+ opt.indent = indent
-- make string
local ok, result, errors = pcall(serialize._make, object, opt)
@@ -283,7 +293,7 @@ function serialize.save(object, opt)
end
-- binary mode
- local func, lerr = loadstring("return " .. result)
+ local func, lerr = loadstring("return " .. result, "=")
if lerr ~= nil then
return nil, lerr
end