-
Notifications
You must be signed in to change notification settings - Fork 1
Specification
Welcome to the RSON wiki, which tries to give a very basic specification for the RSON format.
Structs with named fields can optionally start with their type name. The fields of the struct are wrapped with braces ({
and }
). Trailing commas are (like everywhere else) allowed.
{
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 braces 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 RSON.
()
A tuple struct can be defined like this:
struct TupleStruct(f32, bool, String);
The RSON version looks pretty much the same, but the name is optional.
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
. RSON again 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. 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.
{
"monkey": "mesh/suzanne.obj",
}
{
'a': 97,
'd': 100,
}
One-line comments are denoted by //
, wherever this appears indicates the rest of the line is a comment. Block comments are represented with /*
and */
, any text between them is a comment. Block comments can be nested.
// This is a comment.
{
field_name: 3.4, //This is another comment.
b: 'b',
}
/* This is a block comment. */
{
field_name: 3.4,
/*
b: 'b', /*This is
another comment*/
*/
}