rx finally gets (experimental) structured failures
Rx is my schema system for validating data in a highly extensible and portable way. It is in the same problem space as JSON Schema and Kwalify (both of which, I think, Rx exceeds), and close to RELAX NG. I wrote it last summer, and I’ve used it quite a bit since then, and I have not been unhappy with it… except for its error reporting.
As initially implemented, all it would tell me was “yeah, something wasn’t valid.” This was obviously a real pain, especially when validating complex structures or writing new, complex schemata.
Finally, as Rx and Email::MIME::Kit got intertwined and have started to sink deep down into the guts of Listbox, I knew I’d need to improve what Rx could tell me – or, more importantly, what it could tell the other folks who’d work on the project.
I’m still working on the implementation, but now, given this schema:
type: //seq contents: - //int - //nil - type: //rec required: foo: //int bar: //int optional: baz: type : //arr contents: //int
…and this input…
- 1 - ~ - foo: 1 bar: 2 baz: [ 3, 4, 5, 6.2, 7 ]
…you can get this structured failure (read from bottom to top):
- type : tag:codesimply.com,2008:rx/core/int error : [ type ] message: found value is not an integer - type: tag:codesimply.com,2008:rx/core/arr entry: 3 - type: tag:codesimply.com,2008:rx/core/rec entry: baz - type: tag:codesimply.com,2008:rx/core/seq entry: 2