Comparison

util/dataforms.lua @ 6829:22522443982f

util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
author Kim Alvefur <zash@zash.se>
date Sat, 12 Sep 2015 17:40:14 +0200
parent 6777:5de6b93d0190
child 6830:e08f5d081a6c
comparison
equal deleted inserted replaced
6825:766aa454c79f 6829:22522443982f
143 return data, errors; 143 return data, errors;
144 end 144 end
145 return data; 145 return data;
146 end 146 end
147 147
148 field_readers["text-single"] = 148 local function simple_text(field_tag, required)
149 function (field_tag, required) 149 local data = field_tag:get_child_text("value");
150 local data = field_tag:get_child_text("value"); 150 if data and #data > 0 then
151 if data and #data > 0 then 151 return data
152 return data 152 elseif required then
153 elseif required then 153 return nil, "Required value missing";
154 return nil, "Required value missing"; 154 end
155 end 155 end
156 end 156
157 157 field_readers["text-single"] = simple_text;
158 field_readers["text-private"] = 158
159 field_readers["text-single"]; 159 field_readers["text-private"] = simple_text;
160 160
161 field_readers["jid-single"] = 161 field_readers["jid-single"] =
162 function (field_tag, required) 162 function (field_tag, required)
163 local raw_data = field_tag:get_child_text("value") 163 local raw_data, err = simple_text(field_tag, required);
164 if not raw_data then return raw_data, err; end
164 local data = jid_prep(raw_data); 165 local data = jid_prep(raw_data);
165 if data and #data > 0 then 166 if not data then
166 return data
167 elseif raw_data then
168 return nil, "Invalid JID: " .. raw_data; 167 return nil, "Invalid JID: " .. raw_data;
169 elseif required then 168 end
170 return nil, "Required value missing"; 169 return data;
171 end
172 end 170 end
173 171
174 field_readers["jid-multi"] = 172 field_readers["jid-multi"] =
175 function (field_tag, required) 173 function (field_tag, required)
176 local result = {}; 174 local result = {};
210 data = t_concat(data, "\n"); 208 data = t_concat(data, "\n");
211 end 209 end
212 return data, err; 210 return data, err;
213 end 211 end
214 212
215 field_readers["list-single"] = 213 field_readers["list-single"] = simple_text;
216 field_readers["text-single"];
217 214
218 local boolean_values = { 215 local boolean_values = {
219 ["1"] = true, ["true"] = true, 216 ["1"] = true, ["true"] = true,
220 ["0"] = false, ["false"] = false, 217 ["0"] = false, ["false"] = false,
221 }; 218 };
222 219
223 field_readers["boolean"] = 220 field_readers["boolean"] =
224 function (field_tag, required) 221 function (field_tag, required)
225 local raw_value = field_tag:get_child_text("value"); 222 local raw_value, err = simple_text(field_tag, required);
226 local value = boolean_values[raw_value ~= nil and raw_value]; 223 if not raw_value then return raw_value, err; end
227 if value ~= nil then 224 local value = boolean_values[raw_value];
228 return value; 225 if value == nil then
229 elseif raw_value then 226 return nil, "Invalid boolean representation:" .. raw_value;
230 return nil, "Invalid boolean representation"; 227 end
231 elseif required then 228 return value;
232 return nil, "Required value missing";
233 end
234 end 229 end
235 230
236 field_readers["hidden"] = 231 field_readers["hidden"] =
237 function (field_tag) 232 function (field_tag)
238 return field_tag:get_child_text("value"); 233 return field_tag:get_child_text("value");