Software /
code /
clix
Changeset
132:3addfb97296c
clix.raw: Add a shorthand for top level stanza attributes
The m, p and iq functions are amended so that indexing them sets the
'type' attribute and a subsequent function call with a string sets the
'to' attribute.
Examples:
m.chat"recipient":body"Hello"
iq.get"example.com":query"jabber:iq:version"
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 14 Nov 2020 15:30:35 +0100 |
parents | 131:58d485001448 |
children | 133:be3b857e991f |
files | clix/raw.lua |
diffstat | 1 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/clix/raw.lua Sat Nov 14 15:26:06 2020 +0100 +++ b/clix/raw.lua Sat Nov 14 15:30:35 2020 +0100 @@ -39,11 +39,19 @@ return data; end }; + local stwrap; + do + local f_mt, r_mt = {}, {}; + function f_mt:__call(...) if ... and type(...) == "string" then return self{ to=... } end return self._f(...) end + function f_mt:__index(k) return setmetatable({_st = self._f{ type = k }}, r_mt); end + function r_mt:__call(to) self._st.attr.to = to; return self._st end + function stwrap(f) return setmetatable({_f=f},f_mt) end + end local env = setmetatable({}, { __index = { s = verse.stanza, - m = verse.message, - p = verse.presence, - iq = verse.iq, + m = stwrap(verse.message), + p = stwrap(verse.presence), + iq = stwrap(verse.iq), ping = function(host) return verse.iq{ type="get", to=host}:tag("ping", {xmlns="urn:xmpp:ping"}); end,