EXPERIMENT: Rusty Object Notation reboot

Experimental implementation of a new parser for RON using small functional parsers for individual syntax elements over a stateful parser.

This experiment started off as "RON + nom", but is now using its own parsers & combinators inspired by nom.

Motivation

The current ron parsing suffers from the following problems:

Benefits

Stateless / functional parsers are

An abstract syntax tree (AST)...

Error reporting

The old RON deserializer produced errors that were often hard to understand. ron-reboot is meant to change that; this is the output of a deserialization error as of 2021-10-15:

error: invalid type: boolean `true`, expected a string --> string:3:9 | 3 | y: true, | ^^^^ |

or with a multi-line expression:

error: invalid type: map, expected a string --> string:3:9 | 3 | y: ( | ________^ 4 | | this: "is", 5 | | not: "the right type", 6 | | ), | |______^ |

Goals / Progress

| Goal | Status | |--------------------------------------------------|----------------------------------------------------| | Parser generating AST | :heavycheckmark: done | | Parser generating beautiful errors | :heavycheckmark: done | | Accurate Value deserialization from AST | :heavycheckmark: done | | Replace nom combinators | :heavycheckmark: done | | Spans in AST (locations for error reporting) | :heavycheckmark: done | | Serde Deserializer using AST | :heavycheckmark: done | | Serde Deserializer generating beautiful errors | :heavycheckmark: done | | ron-edit (format & comments preserving writer) | :x: to be done |

Contributions

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, shall be licensed according to the license of this project (The Unlicense), without any additional terms or conditions.