diff options
author | Kim Alvefur <zash@zash.se> | 2019-03-17 21:16:27 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2019-03-17 21:16:27 +0100 |
commit | a335b6de27f7da7df46ec7a4091b6d1ea8ba2fba (patch) | |
tree | f7b397ef078972c58c678feb7da8c45acbef8aec /util | |
parent | 8dbde146973dbdf875e1a5fc5a455218426f454c (diff) | |
download | prosody-a335b6de27f7da7df46ec7a4091b6d1ea8ba2fba.tar.gz prosody-a335b6de27f7da7df46ec7a4091b6d1ea8ba2fba.zip |
util.serialization: Allow overriding table iterator
Could be useful to eg swap it out with sorted_pairs to get a stable
serialization.
Default to next() wrapper to avoid metatable tricks from pairs().
Diffstat (limited to 'util')
-rw-r--r-- | util/serialization.lua | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/util/serialization.lua b/util/serialization.lua index c64bfec1..2ead8c12 100644 --- a/util/serialization.lua +++ b/util/serialization.lua @@ -33,6 +33,10 @@ local function to_hex(s) return (s_gsub(s, ".", char_to_hex)); end +local function rawpairs(t) + return next, t, nil; +end + local function fatal_error(obj, why) error("Can't serialize "..type(obj) .. (why and ": ".. why or "")); end @@ -122,6 +126,7 @@ local function new(opt) local freeze = opt.freeze; local maxdepth = opt.maxdepth or 127; local multirefs = opt.multiref; + local table_pairs = opt.table_iterator or rawpairs; -- serialize one table, recursively -- t - table being serialized @@ -164,7 +169,7 @@ local function new(opt) local numkey = 1; local ktyp, vtyp; local had_items = false; - for k,v in next,t do + for k,v in table_pairs(t) do had_items = true; o[l], l = itemstart, l + 1; o[l], l = indent, l + 1; |