diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /third_party/rust/ron/README.md | |
parent | Initial commit. (diff) | |
download | firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.tar.xz firefox-2aa4a82499d4becd2284cdb482213d541b8804dd.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'third_party/rust/ron/README.md')
-rw-r--r-- | third_party/rust/ron/README.md | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/third_party/rust/ron/README.md b/third_party/rust/ron/README.md new file mode 100644 index 0000000000..26b3e60b02 --- /dev/null +++ b/third_party/rust/ron/README.md @@ -0,0 +1,157 @@ +# Rusty Object Notation + +[![Build Status](https://travis-ci.org/ron-rs/ron.svg?branch=master)](https://travis-ci.org/ron-rs/ron) +[![Crates.io](https://img.shields.io/crates/v/ron.svg)](https://crates.io/crates/ron) +[![Docs](https://docs.rs/ron/badge.svg)](https://docs.rs/ron) +[![Gitter](https://badges.gitter.im/ron-rs/ron.svg)](https://gitter.im/ron-rs/ron) + +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](https://serde.rs/data-model.html), so +structs, enums, tuples, arrays, generic maps, and primitive values. + +## Example + +```rust +GameConfig( // optional struct name + window_size: (800, 600), + window_title: "PAC-MAN", + fullscreen: false, + + mouse_sensitivity: 1.4, + key_bindings: { + "up": Up, + "down": Down, + "left": Left, + "right": Right, + + // Uncomment to enable WASD controls + /* + "W": Up, + "A": Down, + "S": Left, + "D": Right, + */ + }, + + difficulty_options: ( + start_difficulty: Easy, + adaptive: false, + ), +) +``` + +## Why RON? + +### Example in JSON + +```json +{ + "materials": { + "metal": { + "reflectivity": 1.0 + }, + "plastic": { + "reflectivity": 0.5 + } + }, + "entities": [ + { + "name": "hero", + "material": "metal" + }, + { + "name": "monster", + "material": "plastic" + } + ] +} +``` + +Notice these issues: + 1. 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 + 2. No trailing comma allowed + 3. No comments allowed + +### Same example in RON + +```rust +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 us 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,)` | + +### Specification + +There is a very basic, work in progress specification available on +[the wiki page](https://github.com/ron-rs/ron/wiki/Specification). +A more formal and complete grammar is available [here](docs/grammar.md). + +### Appendix + +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! + +## Tooling + +IntelliJ: https://vultix.github.io/intellij-ron-plugin/ + +VS Code: https://github.com/a5huynh/vscode-ron + +Sublime Text: https://packagecontrol.io/packages/RON + +Atom: https://atom.io/packages/language-ron + +Vim: https://github.com/ron-rs/ron.vim + +## License + +RON is dual-licensed under Apache-2.0 and MIT. + |