diff options
author | Kim Alvefur <zash@zash.se> | 2021-03-09 14:36:46 +0100 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2021-03-09 14:36:46 +0100 |
commit | d7b1df42d377d62eccc20fa9efc4c477c45b769c (patch) | |
tree | b0810fb7486ccd5793b1f3f79a7e34e6a3b2f2b9 | |
parent | 21dfac68ed94fd141949cf5e3735f76145c01e34 (diff) | |
download | prosody-d7b1df42d377d62eccc20fa9efc4c477c45b769c.tar.gz prosody-d7b1df42d377d62eccc20fa9efc4c477c45b769c.zip |
util: Add Teal interface definition files
Enables writing code in Teal that is aware of the interfaces and
function prototypes in these other utils.
Could also be used to do type checks on Lua sources, but this tends to
have a lot of noise.
-rw-r--r-- | teal-src/util/compat.d.tl | 4 | ||||
-rw-r--r-- | teal-src/util/crand.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/dataforms.d.tl | 52 | ||||
-rw-r--r-- | teal-src/util/datetime.d.tl | 11 | ||||
-rw-r--r-- | teal-src/util/encodings.d.tl | 27 | ||||
-rw-r--r-- | teal-src/util/error.d.tl | 78 | ||||
-rw-r--r-- | teal-src/util/format.d.tl | 4 | ||||
-rw-r--r-- | teal-src/util/hashes.d.tl | 21 | ||||
-rw-r--r-- | teal-src/util/hex.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/http.d.tl | 9 | ||||
-rw-r--r-- | teal-src/util/human/units.d.tl | 5 | ||||
-rw-r--r-- | teal-src/util/id.d.tl | 9 | ||||
-rw-r--r-- | teal-src/util/interpolation.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/jid.d.tl | 15 | ||||
-rw-r--r-- | teal-src/util/json.d.tl | 5 | ||||
-rw-r--r-- | teal-src/util/net.d.tl | 13 | ||||
-rw-r--r-- | teal-src/util/poll.d.tl | 24 | ||||
-rw-r--r-- | teal-src/util/pposix.d.tl | 106 | ||||
-rw-r--r-- | teal-src/util/random.d.tl | 4 | ||||
-rw-r--r-- | teal-src/util/stanza.d.tl | 61 | ||||
-rw-r--r-- | teal-src/util/strbitop.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/table.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/time.d.tl | 6 | ||||
-rw-r--r-- | teal-src/util/uuid.d.tl | 5 |
24 files changed, 489 insertions, 0 deletions
diff --git a/teal-src/util/compat.d.tl b/teal-src/util/compat.d.tl new file mode 100644 index 00000000..da9c6083 --- /dev/null +++ b/teal-src/util/compat.d.tl @@ -0,0 +1,4 @@ +local record lib + xpcall : function (function, function, ...:any):boolean, any +end +return lib diff --git a/teal-src/util/crand.d.tl b/teal-src/util/crand.d.tl new file mode 100644 index 00000000..80564025 --- /dev/null +++ b/teal-src/util/crand.d.tl @@ -0,0 +1,6 @@ +local record lib + bytes : function (n : number) : string + enum sourceid "OpenSSL" "arc4random()" "Linux" end + _source : sourceid +end +return lib diff --git a/teal-src/util/dataforms.d.tl b/teal-src/util/dataforms.d.tl new file mode 100644 index 00000000..9e4170fa --- /dev/null +++ b/teal-src/util/dataforms.d.tl @@ -0,0 +1,52 @@ +local stanza_t = require "util.stanza".stanza_t + +local enum form_type + "form" + "submit" + "cancel" + "result" +end + +local enum field_type + "boolean" + "fixed" + "hidden" + "jid-multi" + "jid-single" + "list-multi" + "list-single" + "text-multi" + "text-private" + "text-single" +end + +local record form_field + + type : field_type + var : string -- protocol name + name : string -- internal name + + label : string + desc : string + + datatype : string + range_min : number + range_max : number + + value : any -- depends on field_type + options : table +end + +local record dataform + title : string + instructions : string + { form_field } -- XXX https://github.com/teal-language/tl/pull/415 + + form : function ( dataform, table, form_type ) : stanza_t +end + +local record lib + new : function ( dataform ) : dataform +end + +return lib diff --git a/teal-src/util/datetime.d.tl b/teal-src/util/datetime.d.tl new file mode 100644 index 00000000..530b4eb7 --- /dev/null +++ b/teal-src/util/datetime.d.tl @@ -0,0 +1,11 @@ +-- TODO s/number/integer/ once Teal gets support for that + +local record lib + date : function (t : number) : string + datetime : function (t : number) : string + time : function (t : number) : string + legacy : function (t : number) : string + parse : function (t : string) : number +end + +return lib diff --git a/teal-src/util/encodings.d.tl b/teal-src/util/encodings.d.tl new file mode 100644 index 00000000..f029f9cf --- /dev/null +++ b/teal-src/util/encodings.d.tl @@ -0,0 +1,27 @@ +-- TODO many actually return Maybe(String) +local record lib + record base64 + encode : function (s : string) : string + decode : function (s : string) : string + end + record stringprep + nameprep : function (s : string, strict : boolean) : string + nodeprep : function (s : string, strict : boolean) : string + resourceprep : function (s : string, strict : boolean) : string + saslprep : function (s : string, strict : boolean) : string + end + record idna + to_ascii : function (s : string) : string + to_unicode : function (s : string) : string + end + record utf8 + valid : function (s : string) : boolean + length : function (s : string) : number + end + record confusable + skeleteon : function (s : string) : string + end + version : string +end +return lib + diff --git a/teal-src/util/error.d.tl b/teal-src/util/error.d.tl new file mode 100644 index 00000000..2dc72f0e --- /dev/null +++ b/teal-src/util/error.d.tl @@ -0,0 +1,78 @@ +local enum error_type + "auth" + "cancel" + "continue" + "modify" + "wait" +end + +local enum error_condition + "bad-request" + "conflict" + "feature-not-implemented" + "forbidden" + "gone" + "internal-server-error" + "item-not-found" + "jid-malformed" + "not-acceptable" + "not-allowed" + "not-authorized" + "policy-violation" + "recipient-unavailable" + "redirect" + "registration-required" + "remote-server-not-found" + "remote-server-timeout" + "resource-constraint" + "service-unavailable" + "subscription-required" + "undefined-condition" + "unexpected-request" +end + +local record protoerror + type : error_type + condition : error_condition + text : string + code : number +end + +local record error + type : error_type + condition : error_condition + text : string + code : number + context : { any : any } + source : string +end + +local type compact_registry_item = { string, string, string, string } +local type compact_registry = { compact_registry_item } +local type registry = { string : protoerror } +local type context = { string : any } + +local record error_registry_wrapper + source : string + registry : registry + new : function (string, context) : error + coerce : function (any, string) : any, error + wrap : function (error) : error + wrap : function (string, context) : error + is_error : function (any) : boolean +end + +local record lib + record configure_opt + auto_inject_traceback : boolean + end + new : function (protoerror, context, { string : protoerror }, string) : error + init : function (string, string, registry | compact_registry) : error_registry_wrapper + init : function (string, registry | compact_registry) : error_registry_wrapper + is_error : function (any) : boolean + coerce : function (any, string) : any, error + from_stanza : function (table, context, string) : error + configure : function +end + +return lib diff --git a/teal-src/util/format.d.tl b/teal-src/util/format.d.tl new file mode 100644 index 00000000..1ff77c97 --- /dev/null +++ b/teal-src/util/format.d.tl @@ -0,0 +1,4 @@ +local record lib + format : function (string, ... : any) : string +end +return lib diff --git a/teal-src/util/hashes.d.tl b/teal-src/util/hashes.d.tl new file mode 100644 index 00000000..70b1d91e --- /dev/null +++ b/teal-src/util/hashes.d.tl @@ -0,0 +1,21 @@ +local type hash = function (msg : string, hex : boolean) : string +local type hmac = function (key : string, msg : string, hex : boolean) : string +local type kdf = function (pass : string, salt : string, i : number) : string + +local record lib + sha1 : hash + sha256 : hash + sha224 : hash + sha384 : hash + sha512 : hash + md5 : hash + hmac_sha1 : hmac + hmac_sha256 : hmac + hmac_sha512 : hmac + hmac_md5 : hmac + scram_Hi_sha1 : kdf + pbkdf2_hmac_sha1 : kdf + pbkdf2_hmac_sha256 : kdf + version : string +end +return lib diff --git a/teal-src/util/hex.d.tl b/teal-src/util/hex.d.tl new file mode 100644 index 00000000..3b216a88 --- /dev/null +++ b/teal-src/util/hex.d.tl @@ -0,0 +1,6 @@ +local type s2s = function (s : string) : string +local record lib + to : s2s + from : s2s +end +return lib diff --git a/teal-src/util/http.d.tl b/teal-src/util/http.d.tl new file mode 100644 index 00000000..ecbe35c3 --- /dev/null +++ b/teal-src/util/http.d.tl @@ -0,0 +1,9 @@ +local record lib + urlencode : function (s : string) : string + urldecode : function (s : string) : string + formencode : function (f : { string : string }) : string + formdecode : function (s : string) : { string : string } + contains_token : function (field : string, token : string) : boolean + normalize_path : function (path : string) : string +end +return lib diff --git a/teal-src/util/human/units.d.tl b/teal-src/util/human/units.d.tl new file mode 100644 index 00000000..f6568d90 --- /dev/null +++ b/teal-src/util/human/units.d.tl @@ -0,0 +1,5 @@ +local lib = record + adjust : function (number, string) : number, string + format : function (number, string, string) : string +end +return lib diff --git a/teal-src/util/id.d.tl b/teal-src/util/id.d.tl new file mode 100644 index 00000000..0f7aeafc --- /dev/null +++ b/teal-src/util/id.d.tl @@ -0,0 +1,9 @@ +local record lib + short : function () : string + medium : function () : string + long : function () : string + custom : function (number) : function () : string + +end +return lib + diff --git a/teal-src/util/interpolation.d.tl b/teal-src/util/interpolation.d.tl new file mode 100644 index 00000000..fb653edf --- /dev/null +++ b/teal-src/util/interpolation.d.tl @@ -0,0 +1,6 @@ +local type renderer = function (string, { string : any }) : string +local type filter = function (string, any) : string +local record lib + new : function (string, string, funcs : { string : filter }) : renderer +end +return lib diff --git a/teal-src/util/jid.d.tl b/teal-src/util/jid.d.tl new file mode 100644 index 00000000..897318d9 --- /dev/null +++ b/teal-src/util/jid.d.tl @@ -0,0 +1,15 @@ +local record lib + split : function (string) : string, string, string + bare : function (string) : string + prepped_split : function (string, boolean) : string, string, string + join : function (string, string, string) : string + prep : function (string, boolean) : string + compare : function (string, string) : boolean + node : function (string) : string + host : function (string) : string + resource : function (string) : string + escape : function (string) : string + unescape : function (string) : string +end + +return lib diff --git a/teal-src/util/json.d.tl b/teal-src/util/json.d.tl new file mode 100644 index 00000000..86a1495e --- /dev/null +++ b/teal-src/util/json.d.tl @@ -0,0 +1,5 @@ +local record lib + encode : function (any) : string + decode : function (string) : any, string +end +return lib diff --git a/teal-src/util/net.d.tl b/teal-src/util/net.d.tl new file mode 100644 index 00000000..3fd69748 --- /dev/null +++ b/teal-src/util/net.d.tl @@ -0,0 +1,13 @@ + +local enum type_strings + "both" + "ipv4" + "ipv6" +end + +local record lib + local_addresses : function (type_strings, boolean) + pton : function (string):string + ntop : function (string):string +end +return lib diff --git a/teal-src/util/poll.d.tl b/teal-src/util/poll.d.tl new file mode 100644 index 00000000..6fce771e --- /dev/null +++ b/teal-src/util/poll.d.tl @@ -0,0 +1,24 @@ +local record state + enum waiterr + "timeout" + "signal" + end + add : function (state, number, boolean, boolean) : boolean + add : function (state, number, boolean, boolean) : nil, string, number + set : function (state, number, boolean, boolean) : boolean + set : function (state, number, boolean, boolean) : nil, string, number + del : function (state, number) : boolean + del : function (state, number) : nil, string, number + wait : function (state, number) : number, boolean, boolean + wait : function (state, number) : nil, string, number + wait : function (state, number) : nil, waiterr + getfd : function (state) : number +end + +local record lib + new : function () : state + ENOENT : number + EEXIST : number +end + +return lib diff --git a/teal-src/util/pposix.d.tl b/teal-src/util/pposix.d.tl new file mode 100644 index 00000000..12091aa6 --- /dev/null +++ b/teal-src/util/pposix.d.tl @@ -0,0 +1,106 @@ +local record pposix + enum syslog_facility + "auth" + "authpriv" + "cron" + "daemon" + "ftp" + "kern" + "local0" + "local1" + "local2" + "local3" + "local4" + "local5" + "local6" + "local7" + "lpr" + "mail" + "syslog" + "user" + "uucp" + end + + enum syslog_level + "debug" + "info" + "notice" + "warn" + "error" + end + + enum ulimit_resource + "CORE" + "CPU" + "DATA" + "FSIZE" + "NOFILE" + "STACK" + "MEMLOCK" + "NPROC" + "RSS" + "NICE" + end + + enum ulimit_unlimited + "unlimited" + end + + type ulimit_limit = number | ulimit_unlimited + + record utsname + sysname : string + nodename : string + release : string + version : string + machine : string + domainname : string + end + + record memoryinfo + allocated : number + allocated_mmap : number + used : number + unused : number + returnable : number + end + + abort : function () + + daemonize : function () : boolean, string + + syslog_open : function (ident : string, facility : syslog_facility) + syslog_close : function () + syslog_log : function (level : syslog_level, src : string, msg : string) + syslog_setminlevel : function (level : syslog_level) + + getpid : function () : number + getuid : function () : number + getgid : function () : number + + setuid : function (uid : string) : boolean, string -- string|number + setgid : function (uid : string) : boolean, string + initgroups : function (user : string, gid : number) : boolean, string + + umask : function (umask : string) : string + + mkdir : function (dir : string) : boolean, string + + setrlimit : function (resource : ulimit_resource, soft : ulimit_limit, hard : ulimit_limit) : boolean, string + getrlimit : function (resource : ulimit_resource) : boolean, ulimit_limit, ulimit_limit + getrlimit : function (resource : ulimit_resource) : boolean, string + + uname : function () : utsname + + setenv : function (key : string, value : string) : boolean + + meminfo : function () : memoryinfo + + atomic_append : function (f : FILE, s : string) : boolean, string, number + + ENOENT : number + _NAME : string + _VESRION : string +end + +return pposix diff --git a/teal-src/util/random.d.tl b/teal-src/util/random.d.tl new file mode 100644 index 00000000..6f64f2e5 --- /dev/null +++ b/teal-src/util/random.d.tl @@ -0,0 +1,4 @@ +local record lib + bytes : function (n:number):string +end +return lib diff --git a/teal-src/util/stanza.d.tl b/teal-src/util/stanza.d.tl new file mode 100644 index 00000000..8a077087 --- /dev/null +++ b/teal-src/util/stanza.d.tl @@ -0,0 +1,61 @@ +local record lib + + type children_iter = function ( stanza_t ) : stanza_t + type childtags_iter = function () : stanza_t + type maptags_cb = function ( stanza_t ) : stanza_t + + record stanza_t + name : string + attr : { string : string } + { stanza_t | string } + tags : { stanza_t } + + query : function ( stanza_t, string ) : stanza_t + body : function ( stanza_t, string, { string : string } ) : stanza_t + text_tag : function ( stanza_t, string, string, { string : string } ) : stanza_t + tag : function ( stanza_t, string, { string : string } ) : stanza_t + text : function ( stanza_t, string ) : stanza_t + up : function ( stanza_t ) : stanza_t + reset : function ( stanza_t ) : stanza_t + add_direct_child : function ( stanza_t, stanza_t ) + add_child : function ( stanza_t, stanza_t ) + remove_children : function ( stanza_t, string, string ) : stanza_t + + get_child : function ( stanza_t, string, string ) : stanza_t + get_text : function ( stanza_t ) : string + get_child_text : function ( stanza_t, string, string ) : string + child_with_name : function ( stanza_t, string, string ) : stanza_t + child_with_ns : function ( stanza_t, string, string ) : stanza_t + children : function ( stanza_t ) : children_iter, stanza_t, number + childtags : function ( stanza_t, string, string ) : childtags_iter + maptags : function ( stanza_t, maptags_cb ) : stanza_t + find : function ( stanza_t, string ) : stanza_t | string + + top_tag : function ( stanza_t ) : string + pretty_print : function ( stanza_t ) : string + pretty_top_tag : function ( stanza_t ) : string + + get_error : function ( stanza_t ) : string, string, string, stanza_t + indent : function ( stanza_t, number, string ) : stanza_t + end + + record serialized_stanza_t + name : string + attr : { string : string } + { serialized_stanza_t | string } + end + + stanza : function ( string, { string : string } ) : stanza_t + is_stanza : function ( any ) : boolean + preserialize : function ( stanza_t ) : serialized_stanza_t + deserialize : function ( serialized_stanza_t ) : stanza_t + clone : function ( stanza_t, boolean ) : stanza_t + message : function ( { string : string }, string ) : stanza_t + iq : function ( { string : string } ) : stanza_t + reply : function ( stanza_t ) : stanza_t + error_reply : function ( stanza_t, string, string, string, string ) + presence : function ( { string : string } ) : stanza_t + xml_escape : function ( string ) : string +end + +return lib diff --git a/teal-src/util/strbitop.d.tl b/teal-src/util/strbitop.d.tl new file mode 100644 index 00000000..010efdb8 --- /dev/null +++ b/teal-src/util/strbitop.d.tl @@ -0,0 +1,6 @@ +local record mod + sand : function (string, string) : string + sor : function (string, string) : string + sxor : function (string, string) : string +end +return mod diff --git a/teal-src/util/table.d.tl b/teal-src/util/table.d.tl new file mode 100644 index 00000000..6f8c7e4a --- /dev/null +++ b/teal-src/util/table.d.tl @@ -0,0 +1,6 @@ +local record lib + create : function (narr:number, nrec:number):table + pack : function (...:any):{any} +end +return lib + diff --git a/teal-src/util/time.d.tl b/teal-src/util/time.d.tl new file mode 100644 index 00000000..e159706b --- /dev/null +++ b/teal-src/util/time.d.tl @@ -0,0 +1,6 @@ + +local record lib + now : function () : number + monotonic : function () : number +end +return lib diff --git a/teal-src/util/uuid.d.tl b/teal-src/util/uuid.d.tl new file mode 100644 index 00000000..17bb0590 --- /dev/null +++ b/teal-src/util/uuid.d.tl @@ -0,0 +1,5 @@ +local record lib + generate : function (number) : string +end +return lib + |