-
Notifications
You must be signed in to change notification settings - Fork 144
Specification
Welcome to the RON wiki, which tries to give a very basic specification for the RON format.
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).
(
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 have two representations: Their name or ().
They're defined like this:
struct Unit;Unit()The unit value (()) has the same representation in RON.
()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.
TupleStruct(3.4, false, "Hey there!")(
4.3,
true,
"Looks different, doesn't it?",
)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.
Some(3.1415926535)NoneCollections 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.
[1, 2, 3,][
22,
26,
34,
41,
46,
56,
]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 }.
{
"monkey": "mesh/suzanne.obj",
}{
'a': 97,
'd': 100,
}Comments are denoted by //, wherever this appears indicates the rest of the line is a comment.
// This is a comment.
(
field_name: 3.4, //This is another comment.
b: 'b',
)