bsw@51: function util.autoapi_xml(args) bsw@51: local selector = assert(args.selector) bsw@51: local fields = assert(args.fields) bsw@51: local rows = selector:exec() bsw@51: slot.set_layout("xml") bsw@51: slot.put("\n") bsw@51: for i_row, row in ipairs(rows) do bsw@51: slot.put(" \n") bsw@51: for i_field, field in ipairs(fields) do bsw@51: slot.put(" <", field.name, ">") bsw@51: local value bsw@51: if field.func then bsw@51: value = field.func(row) bsw@51: elseif field.field then bsw@51: value = row[field.name] bsw@51: end bsw/jbe@52: if value ~= nil then bsw@51: slot.put(encode.html(tostring(value))) bsw/jbe@52: else bsw/jbe@52: slot.put("NULL") bsw@51: end bsw@51: slot.put("\n") bsw@51: end bsw@51: slot.put(" \n") bsw@51: end bsw@51: slot.put("\n") bsw@51: end bsw@51: bsw@51: function util.autoapi_json(args) bsw@51: slot.set_layout("blank") bsw@51: local selector = assert(args.selector) bsw@51: local fields = assert(args.fields) bsw@51: local rows = selector:exec() bsw@51: slot.put("{\n") bsw@51: for i_row, row in ipairs(rows) do bsw@51: slot.put(" {\n") bsw@51: for i_field, field in ipairs(fields) do bsw@51: slot.put(" ", field.name, ": ") bsw@51: local value bsw@51: if field.func then bsw@51: value = field.func(row) bsw@51: elseif field.field then bsw@51: value = row[field.name] bsw@51: end bsw@51: slot.put(encode.json(value)) bsw@51: slot.put(",\n") bsw@51: end bsw@51: slot.put(" },\n") bsw@51: end bsw@51: slot.put("}\n") bsw@51: end bsw@51: bsw@51: function util.autoapi(args) bsw@51: local selector = assert(args.selector) bsw@51: local fields = assert(args.fields) bsw@51: local api_engine = assert(args.api_engine) bsw@51: bsw@51: selector:reset_fields() bsw@51: bsw@51: for i_field, field in ipairs(fields) do bsw@51: if field.field then bsw@51: selector:add_field(field.field, field.name) bsw@51: end bsw@51: end bsw@51: bsw@51: if api_engine == "xml" then bsw@51: util.autoapi_xml{ bsw@51: selector = selector, bsw@51: fields = fields bsw@51: } bsw@51: elseif api_engine == "json" then bsw@51: util.autoapi_json{ bsw@51: selector = selector, bsw@51: fields = fields bsw@51: } bsw@51: end bsw@51: bsw@51: end