RON is a simple readable data serialization format that looks similar to Rust syntax. It's designed to support all of Serde's data model, so structs, enums, tuples, arrays, generic maps, and primitive values.
{
   "materials": {
        "metal": {
            "reflectivity": 1.0
        },
        "plastic": {
            "reflectivity": 0.5
        }
   },
   "entities": [
        {
            "name": "hero",
            "material": "metal"
        },
        {
            "name": "moster",
            "material": "plastic"
        }
   ]
}Notice these issues:
- Struct and maps are the same
- random order of exported fields
- annoying and inconvenient for reading
- doesn't work well with version control - quoted field names
- too verbose - no support for enums
 
- No trailing comma allowed
- No comments allowed
Scene( // class name is optional
    materials: { // this is a map
        "metal": (
            reflectivity: 1.0,
        ),
        "plastic": (
            reflectivity: 0.5,
        ),
    },
    entities: [ // this is an array
        (
            name: "hero",
            material: "metal",
        ),
        (
            name: "monster",
            material: "plastic",
        ),
    ],
)The new format uses (..) brackets for heterogeneous structures (classes),
while preserving the {..} for maps, and [..] for homogeneous structures (arrays).
This distinction allows to solve the biggest problem with JSON.
Here are the general rules to parse the heterogeneous structures:
| class is named? | fields are named? | what is it? | example | 
|---|---|---|---|
| no | no | tuple | (a, b) | 
| yes/no | no | tuple struct | Name(a, b) | 
| yes | no | enum value | Variant(a, b) | 
| yes/no | yes | struct | (f1: a, f2: b,) | 
There is a very basic, work in progress specification available on the wiki page.
Why not XML?
- too verbose
- unclear how to treat attributes vs contents
Why not YAML?
- significant white-space
- specification is too big
Why not TOML?
- alien syntax
- absolute paths are not scalable
Why not XXX?
- if you know a better format, tell me!
RON is dual-licensed under Apache-2.0 and MIT.
