Software /
code /
prosody
Comparison
plugins/mod_storage_sql2.lua @ 5735:24f4e73645fe
mod_storage_sql2: Support XML serialization for stanzas.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 10 Jul 2013 13:19:33 +0200 |
parent | 5734:49f1fed6e25e |
child | 5740:6fce00f61acf |
comparison
equal
deleted
inserted
replaced
5734:49f1fed6e25e | 5735:24f4e73645fe |
---|---|
1 | 1 |
2 local json = require "util.json"; | 2 local json = require "util.json"; |
3 local xml_parse = require "util.xml".parse; | |
3 local resolve_relative_path = require "core.configmanager".resolve_relative_path; | 4 local resolve_relative_path = require "core.configmanager".resolve_relative_path; |
5 | |
6 local stanza_mt = require"util.stanza".stanza_mt; | |
7 local getmetatable = getmetatable; | |
8 local function is_stanza(x) return getmetatable(x) == stanza_mt; end | |
4 | 9 |
5 local unpack = unpack | 10 local unpack = unpack |
6 local function iterator(result) | 11 local function iterator(result) |
7 return function(result) | 12 return function(result) |
8 local row = result(); | 13 local row = result(); |
132 | 137 |
133 local function serialize(value) | 138 local function serialize(value) |
134 local t = type(value); | 139 local t = type(value); |
135 if t == "string" or t == "boolean" or t == "number" then | 140 if t == "string" or t == "boolean" or t == "number" then |
136 return t, tostring(value); | 141 return t, tostring(value); |
142 elseif is_stanza(value) then | |
143 return "xml", tostring(value); | |
137 elseif t == "table" then | 144 elseif t == "table" then |
138 local value,err = json.encode(value); | 145 local value,err = json.encode(value); |
139 if value then return "json", value; end | 146 if value then return "json", value; end |
140 return nil, err; | 147 return nil, err; |
141 end | 148 end |
147 if value == "true" then return true; | 154 if value == "true" then return true; |
148 elseif value == "false" then return false; end | 155 elseif value == "false" then return false; end |
149 elseif t == "number" then return tonumber(value); | 156 elseif t == "number" then return tonumber(value); |
150 elseif t == "json" then | 157 elseif t == "json" then |
151 return json.decode(value); | 158 return json.decode(value); |
159 elseif t == "xml" then | |
160 return xml_parse(value); | |
152 end | 161 end |
153 end | 162 end |
154 | 163 |
155 local host = module.host; | 164 local host = module.host; |
156 local user, store; | 165 local user, store; |