aboutsummaryrefslogtreecommitdiffstats
path: root/util/stanza.lua
diff options
context:
space:
mode:
Diffstat (limited to 'util/stanza.lua')
-rw-r--r--util/stanza.lua37
1 files changed, 36 insertions, 1 deletions
diff --git a/util/stanza.lua b/util/stanza.lua
index 06991cda..a4fd0f82 100644
--- a/util/stanza.lua
+++ b/util/stanza.lua
@@ -6,6 +6,7 @@ local setmetatable = setmetatable;
local pairs = pairs;
local ipairs = ipairs;
local type = type;
+local unpack = unpack;
local s_gsub = string.gsub;
module "stanza"
@@ -107,6 +108,40 @@ do
end
end
+function preserialize(stanza)
+ local s = { name = stanza.name, attr = stanza.attr };
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ t_insert(s, preserialize(child));
+ else
+ t_insert(s, child);
+ end
+ end
+ return s;
+end
+
+function deserialize(stanza)
+ -- Set metatable
+ setmetatable(stanza, stanza_mt);
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ deserialize(child);
+ end
+ end
+ if not stanza.tags then
+ -- Rebuild tags
+ local tags = {};
+ for _, child in ipairs(stanza) do
+ if type(child) == "table" then
+ t_insert(tags, child);
+ end
+ end
+ stanza.tags = tags;
+ end
+
+ return stanza;
+end
+
function message(attr, body)
if not body then
return stanza("message", attr);
@@ -137,4 +172,4 @@ function presence(attr)
return stanza("presence", attr);
end
-return _M; \ No newline at end of file
+return _M;