File

teal-src/util/stanza.d.tl @ 12579:ca6a43fe0231 0.12

util.jsonschema: Fix validation to not assume presence of "type" field MattJ reported a curious issue where validation did not work as expected. Primarily that the "type" field was expected to be mandatory, and thus leaving it out would result in no checks being performed. This was likely caused by misreading during initial development. Spent some time testing against https://github.com/json-schema-org/JSON-Schema-Test-Suite.git and discovered a multitude of issues, far too many to bother splitting into separate commits. More than half of them fail. Many because of features not implemented, which have been marked NYI. For example, some require deep comparisons e.g. when objects or arrays are present in enums fields. Some because of quirks with how Lua differs from JavaScript, e.g. no distinct array or object types. Tests involving fractional floating point numbers. We're definitely not going to follow references to remote resources. Or deal with UTF-16 sillyness. One test asserted that 1.0 is an integer, where Lua 5.3+ will disagree.
author Kim Alvefur <zash@zash.se>
date Fri, 08 Jul 2022 14:38:23 +0200
parent 11642:7f2dee4249aa
child 12516:d76ac22f3571
line wrap: on
line source

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, integer
		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, integer, 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
	pretty_print : function ( string ) : string
end

return lib