Diff

teal-src/util/datamapper.tl @ 11458:0e00fa518688

util.datamapper: Limited support for unparsing simple arrays of strings
author Kim Alvefur <zash@zash.se>
date Thu, 18 Mar 2021 13:07:10 +0100
parent 11457:6a51749af7f4
child 11459:86904555bffc
line wrap: on
line diff
--- a/teal-src/util/datamapper.tl	Thu Mar 18 12:57:25 2021 +0100
+++ b/teal-src/util/datamapper.tl	Thu Mar 18 13:07:10 2021 +0100
@@ -192,6 +192,8 @@
 			error "NYI"
 		end
 
+		value = totype(proptype, value)
+
 		if value ~= nil then
 			table.insert(out, value);
 		end
@@ -210,7 +212,6 @@
 end
 
 local function unparse ( schema : js.schema_t, t : table, current_name : string, current_ns : string ) : st.stanza_t
-	if schema.type == "object" then
 
 		if schema.xml then
 			if schema.xml.name then
@@ -224,6 +225,8 @@
 
 		local out = st.stanza(current_name, { xmlns = current_ns })
 
+	if schema.type == "object" then
+
 		for prop, propschema in pairs(schema.properties) do
 			local v = t[prop]
 
@@ -294,13 +297,40 @@
 						if c then
 							out:add_direct_child(c);
 						end
-					-- else TODO
+					elseif proptype == "array" and propschema is js.schema_t and v is table then
+						local c = unparse(propschema, v, name, namespace);
+						if c then
+							if value_where == "in_wrapper" then
+								local w = st.stanza(propschema.xml.name or name, { xmlns = propschema.xml.namespace or namespace })
+								w:add_direct_child(c);
+								out:add_direct_child(w);
+							else
+								out:add_direct_child(c);
+							end
+						end
+					else
+						error "NYI"
 					end
 				end
 			end
 		end
 		return out;
 
+	elseif schema.type == "array" then
+		local proptype, value_where, name, namespace = unpack_propschema(schema.items, current_name, current_ns)
+		-- TODO , prefix, single_attribute
+		if proptype == "string" then
+			for _, item in ipairs(t as { string }) do
+				if value_where == "in_text_tag" then
+					out:text_tag(name, item, { xmlns = namespace });
+				else
+					error "NYI"
+				end
+			end
+		else
+			error "NYI"
+		end
+		return out;
 	end
 end