util.datamapper: Add logic for "boolean" tags here the presence means true
authorKim Alvefur <zash@zash.se>
Sun, 07 Mar 2021 01:41:39 +0100
changeset 11442 b7807583de34
parent 11441 87a684df4b65
child 11443 9abcdfdcdb01
util.datamapper: Add logic for "boolean" tags here the presence means true
spec/util_datamapper_spec.lua
teal-src/util/datamapper.tl
util/datamapper.lua
--- a/spec/util_datamapper_spec.lua	Sat Mar 06 23:14:23 2021 +0100
+++ b/spec/util_datamapper_spec.lua	Sun Mar 07 01:41:39 2021 +0100
@@ -31,6 +31,10 @@
 					type = "string";
 					xml = {x_name_is_value = true; namespace = "http://jabber.org/protocol/chatstates"};
 				};
+				fallback = {
+					type = "boolean";
+					xml = {x_name_is_value = true; name = "fallback"; namespace = "urn:xmpp:fallback:0"};
+				};
 			};
 		};
 
@@ -39,6 +43,7 @@
 				<body>Hello</body>
 				<delay xmlns='urn:xmpp:delay' from='test' stamp='2021-03-07T15:59:08+00:00'>Becasue</delay>
 				<active xmlns='http://jabber.org/protocol/chatstates'/>
+				<fallback xmlns='urn:xmpp:fallback:0'/>
 				</message>
 				]];
 
@@ -51,6 +56,7 @@
 			body = "Hello";
 			delay = {from = "test"; stamp = "2021-03-07T15:59:08+00:00"; reason = "Becasue"};
 			state = "active";
+			fallback = true;
 		};
 	end);
 
--- a/teal-src/util/datamapper.tl	Sat Mar 06 23:14:23 2021 +0100
+++ b/teal-src/util/datamapper.tl	Sun Mar 07 01:41:39 2021 +0100
@@ -49,8 +49,10 @@
 
 			if name_is_value then
 				local c = s:get_child(nil, namespace);
-				if c then
+				if c and proptype == "string" then
 					out[prop] = c.name;
+				elseif proptype == "boolean" and c then
+					out[prop] = true;
 				end
 			elseif is_attribute then
 				local attr = name
@@ -183,8 +185,12 @@
 					if namespace ~= current_ns then
 						propattr = { xmlns = namespace }
 					end
-					if name_is_value and v is string then
-						out:tag(v, propattr):up();
+					if name_is_value then
+						if proptype == "string" and v is string then
+							out:tag(v, propattr):up();
+						elseif proptype == "boolean" and v == true then
+							out:tag(name, propattr):up();
+						end
 					elseif proptype == "string" and v is string then
 						out:text_tag(name, v, propattr)
 					elseif proptype == "number" and v is number then
--- a/util/datamapper.lua	Sat Mar 06 23:14:23 2021 +0100
+++ b/util/datamapper.lua	Sun Mar 07 01:41:39 2021 +0100
@@ -48,8 +48,10 @@
 
 			if name_is_value then
 				local c = s:get_child(nil, namespace);
-				if c then
+				if c and proptype == "string" then
 					out[prop] = c.name;
+				elseif proptype == "boolean" and c then
+					out[prop] = true;
 				end
 			elseif is_attribute then
 				local attr = name
@@ -182,8 +184,12 @@
 					if namespace ~= current_ns then
 						propattr = {xmlns = namespace}
 					end
-					if name_is_value and type(v) == "string" then
-						out:tag(v, propattr):up();
+					if name_is_value then
+						if proptype == "string" and type(v) == "string" then
+							out:tag(v, propattr):up();
+						elseif proptype == "boolean" and v == true then
+							out:tag(name, propattr):up();
+						end
 					elseif proptype == "string" and type(v) == "string" then
 						out:text_tag(name, v, propattr)
 					elseif proptype == "number" and type(v) == "number" then