Skip to content
Jacob Kiesel edited this page Aug 4, 2017 · 5 revisions

Welcome to the RON wiki, which tries to give a very basic specification for the RON format.

Structs

Structs with named fields can optionally start with their type name. The fields of the struct are wrapped with brackets (( and )). A trailing comma is required, unless the struct is empty (see the last example in this section).

Examples

(
    field_name: 3.4,
    b: 'b',
)
(a: false,)
Vector2(
    x: 42.0,
    y: 5.0,
)

An empty struct with braces at the end:

struct Empty {}

Note that it gets deserialized like this:

Empty()

As you can see, there is no comma, but two brackets at the end. This is not true for unit structs, which are specified below.

Unit structs

Unit structs have two representations: Their name or ().

They're defined like this:

struct Unit;

Examples

Unit
()

Unit value

The unit value (()) has the same representation in RON.

Examples

()

Tuple structs

A tuple struct can be defined like this:

struct TupleStruct(f32, bool, String);

The RON version looks pretty much the same, but the name is optional. Please note that, as opposed to structs, it does not require a trailing comma, but allows it.

Examples

TupleStruct(3.4, false, "Hey there!")
(
    4.3,
    true,
    "Looks different, doesn't it?",
)

Optionals

What serde describes as optional is just the representation of Rust's Option. RON agains stays very close to Rust, so it's just Some(Value) or None.

Examples

Some(3.1415926535)
None

Lists

Collections of values with a variable element number are represented with [ and ] around them, separated by commas. A trailing comma is required. Please note that serde handles fixed-size arrays as tuples, so this section is only valid for types like &[u32] and Vec<bool>, but not for [f32; 3].

Lists are homogeneous, so all elements have the same type.

Examples

[1, 2, 3,]
[
    22,
    26,
    34,
    41,
    46,
    56,
]

Maps

A map looks similar to a struct, but the keys are also values instead of identifiers. So a trailing comma is required and the brackets for a map are { and }.

Examples

{
    "monkey": "mesh/suzanne.obj",
}
{
    'a': 97,
    'd': 100,
}

Comments

Comments are denoted by //, wherever this appears indicates the rest of the line is a comment.

Examples

// This is a comment.
(
    field_name: 3.4, //This is another comment.
    b: 'b',
)
Clone this wiki locally