-
Notifications
You must be signed in to change notification settings - Fork 129
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)
None
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.
[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',
)