aboutsummaryrefslogtreecommitdiffstats
path: root/util/datamapper.lua
Commit message (Collapse)AuthorAgeFilesLines
* util.mathcompat: Module to ease reuse of math.type()Kim Alvefur2022-10-201-0/+4
| | | | | Mostly to ensure it is available during tests, as util.startup is not invoked there
* util.datamapper: Improve handling of schemas with non-obvious "type"Kim Alvefur2022-07-081-10/+27
| | | | | | | | | | | | The JSON Schema specification says that schemas are objects or booleans, and that the 'type' property is optional and can be an array. This module previously allowed bare type names as schemas and did not really handle booleans. It now handles missing 'type' properties and boolean 'true' as a schema. Objects and arrays are guessed based on the presence of 'properties' or 'items' field.
* util.datamapper: Add support for $ref pointersKim Alvefur2021-12-291-18/+39
| | | | Allows reuse of repetitive definitions in schemas.
* util.datamapper: Don't include empty unwrapped arraysKim Alvefur2021-03-241-1/+4
| | | | | | Since there is no way to distinguish an empty such array from a zero-length array. Dropping it seems like the least annoying thing to do.
* util.datamapper: Fix error on attempt to coerce nil to somethingKim Alvefur2021-03-231-0/+3
| | | | | | Turns falsy values into nil instead of nothing, which ensures this function always has 1 return value, or table.insert({}) complains. Would still happen on some unexpected input, but that's actually a good thing.
* util.datamapper: Deal with locally built stanzas missing xmlnsKim Alvefur2021-03-231-5/+5
| | | | | | | | | | | | | | | | | | | | | So the problem is that xmlns is not inherited when building a stanza, and then :get_child(n, ns) with an explicit namespace does not find that such child tags. E.g. local t = st.stanza("foo", { xmlns = "urn:example:bar" }) :text_tag("hello", "world"); assert(t:get_child("hello", "urn:example:bar"), "This fails"); Meanwhile, during parsing (util.xmppstream or util.xml) child tags do get the parents xmlns when not overriding them. Thus, in the above example, if the stanza is passed trough `t = util.xml.parse(tostring(t))` then the assert succeeds. This change makes it so that it leaves out the namespace argument to :get_child when it is the same as the current/parent namespace, which behaves the same for both built and parsed stanzas.
* util.datamapper: Factor out conversion from any value to XML stringKim Alvefur2021-03-221-29/+17
| | | | Since this was the last severely duplicated code left.
* util.datamapper: Handle nested arrays or objects in arraysKim Alvefur2021-03-221-4/+22
|
* util.datamapper: Fix to skip parsing wrapped arrays that aren't thereKim Alvefur2021-03-221-2/+0
| | | | Turns out the unreachable error is reachable :D
* util.datamapper: Complete array building supportKim Alvefur2021-03-201-12/+3
|
* util.datamapper: Factor out handling of object properties for array reuseKim Alvefur2021-03-201-79/+82
|
* util.datamapper: Finally implement support for parsing arraysKim Alvefur2021-03-201-13/+9
|
* util.datamapper: Factor out extraction of the XML part to useKim Alvefur2021-03-201-40/+42
| | | | | | | | So extract_value() takes an XML tag and details about which part we're interested in and returns that. Factoring this out will help with array implementation since this will be common behavior.
* util.datamapper: Only get element name if there's an elementKim Alvefur2021-03-191-1/+3
| | | | Fixes error due to attempting to index a nil value
* util.datamapper: Fix arrays nesting one level too deepKim Alvefur2021-03-191-9/+9
|
* util.datamapper: Deal with type name changes in util.jsonschemaKim Alvefur2021-03-191-1/+1
|
* util.datamapper: Limited support for unparsing simple arrays of stringsKim Alvefur2021-03-181-11/+41
|
* util.datamapper: Add initial support for parsing arraysKim Alvefur2021-03-181-9/+47
|
* util.datamapper: Factor out common schema unpackingKim Alvefur2021-03-141-80/+53
| | | | | This code extracts the bits from the schema that determines how the data is to be mapped to/from XML.
* util.datamapper: Separate extraction of xml from coercion to target typeKim Alvefur2021-03-141-34/+28
| | | | | | Now it gets the text, attribute or name first, then turns it into whatever the schema wants. This should be easier to further factor out into preparation for array support.
* util.datamapper: Use enum instead of mutually exclusive booleansKim Alvefur2021-03-141-20/+20
| | | | Cleaner and rules out invalid combinations.
* util.datamapper: Enumerated elementsKim Alvefur2021-03-121-1/+20
| | | | E.g. error conditions or chat states.
* util.datamapper: Add references with notesKim Alvefur2021-03-101-0/+3
|
* util.datamapper: Add support for mapping of elements where only one ↵Kim Alvefur2021-03-071-0/+34
| | | | | | | attribute matters E.g. <feature var='foo'/> in XEP-0030 and some other simple specifications.
* util.datamapper: Add logic for "boolean" tags here the presence means trueKim Alvefur2021-03-071-3/+9
|
* util.datamapper: Invent extension for using tag name as valueKim Alvefur2021-03-061-2/+15
| | | | | Useful for certain enum-like uses where the element name is the relevant information, e.g. chat states.
* util.datamapper: Add 'unparse' for turning tables into XMLKim Alvefur2021-03-071-1/+102
|
* util.datamapper: Library for extracting data from stanzasKim Alvefur2021-03-071-0/+96
Based on the XML support in the OpenAPI specification.