| Crates.io | keon |
| lib.rs | keon |
| version | 0.2.0 |
| created_at | 2025-01-11 16:13:06.25078+00 |
| updated_at | 2025-01-20 08:47:52.21892+00 |
| description | A human readable object notation that syntactic similar to Rust and fully supports Serde's data model. |
| homepage | |
| repository | https://github.com/eternal-io/keon |
| max_upload_size | |
| id | 1512507 |
| size | 113,662 |
KEON is a human readable object notation / serialization format that syntactic similar to Rust and completely supports Serde's data model. For more details, like motivations, please see the repository.
| Unit | () |
|---|---|
| Booleans | true , false |
| Numbers | 42 , 0x1123 , -1 , 3.14 , inf , NaN |
| Chars | 'A' , 'β±' , '\n' , '\u{3000}' |
| Strings | "Hello" , `"raw string ^o^/"` |
| Bytes | b"Hello" , b`"raw bytes ^o^/"` , b64"Sy0tQWV0aGlheA" |
| Options | ? , ? Thing |
| Tuples | (T,) , (T, U, V) |
| Lists | ["abc", "def"] |
| Maps | { 1 => 2, 3 => 4 } |
| Structs | (Struct) { field1: "value1", field2: "value2" } |
| Variants | Enum::Variant , Variant |
And the Paragraphs, leave anything after the start sign of each line intact:
| As is newline |
|
| Space-joined line (will trim spaces) |
|
| Joined line (will trim spaces) |
|
The start signs can be mixed, but the first must be the vertical-bar |.
(Save) { // <- optional struct name.
greeting: "Hello world!",
keybinds: {
Action::Up => 'W', // <- optional enum name.
Action::Down => 'S',
Action::Left => 'A',
Action::Right => 'D',
},
difficulty_factor: 4.3,
respawn_point: ( // <- can use parentheses `(` for tuple `)`.
1107.1487,
1249.0458,
),
inventory: [
Item::Water,
Item::CannedFood,
Item::IdCard(101), // <- newtype variant / tuple variant.
Item::RocketLauncher {
damage: 250,
explosion_radius: 60.0,
},
],
}
Less syntactic noise, more intuitive look.
Allow comments and trailing commas.
Write KEON almost like you write Rust:
{} to represent maps and structs (RON doesn't).seq in Serde).Supports use Base64, Base32 and Base16 to represent bytes.
Provides Paragraph may be helpful when writing something by hand.
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct MyData {
msg: String,
float: f32,
}
fn main() {
let dat: MyData = keon::from_str(r#"{ msg: "Hello!", float: 1123. }"#).unwrap();
println!("KEON: {}", keon::to_string(&dat).unwrap());
println!("Pretty KEON: {}", keon::to_string_pretty(&dat).unwrap());
}