Diff

util/stanza.lua @ 90:da468ed49a7b

Stanza preserialize/deserialize helpers, to strip and restore stanzas respectively. Fixed mod_vcard to use these.
author Matthew Wild <mwild1@gmail.com>
date Thu, 09 Oct 2008 00:50:45 +0100
parent 70:a6c00467a3f8
child 91:6d66eb6b24cb
line wrap: on
line diff
--- a/util/stanza.lua	Thu Oct 09 03:40:16 2008 +0500
+++ b/util/stanza.lua	Thu Oct 09 00:50:45 2008 +0100
@@ -6,6 +6,7 @@
 local pairs         =         pairs;
 local ipairs        =        ipairs;
 local type          =          type;
+local unpack        =        unpack;
 local s_gsub        =   string.gsub;
 module "stanza"
 
@@ -107,6 +108,40 @@
         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 @@
 	return stanza("presence", attr);
 end
 
-return _M;
\ No newline at end of file
+return _M;