Crates.io | rust_object_format |
lib.rs | rust_object_format |
version | 0.1.0 |
source | src |
created_at | 2023-04-07 01:28:09.933112 |
updated_at | 2023-04-07 01:28:09.933112 |
description | Rust Object Format API for Rust. |
homepage | |
repository | https://github.com/Jamzy01/rof |
max_upload_size | |
id | 832664 |
size | 8,698 |
Rust object format allows rust objects to be serialized to a file in a text format very closely resembling the original object. It also allows easy transfer of objects between different programming langauges, as the objects can be created in their respective language, serialized to string, send to another language, deserialzed and used once again.
TL;DR A library that can serialize and deserialize rust objects to string which allows simple file saving and transmission of rust objects between separate programming languages.
Design Goals
Language
Rust Library Docs
JS Library Docs
Encapsulated by a pair of curly brackets
{
title: string = "Ferris the crab";
}
Each object property is defined as follows, and always ended by a semicolon.
property_name: property_type = property_value;
property_name = property_value;
A simple property type only includes a base type
Boolean Types
false
true
type annotation optional, can be implied
is_swimming: bool = false;
Text Types
"string"
(strictly needs double quotes)'c'
(strictly needs single quotes)type annotation optional, can be implied
Number Types
All integer type values are written the same
year: u8 = 2023;
distance: i8 = -32;
year: u16 = 2023;
distance: i16 = -32;
year: u32 = 2023;
distance: i32 = -32;
year: u64 = 2023;
distance: i64 = -32;
year: u128 = 2023;
distance: i128 = -32;
year: usize = 2023;
distance: isize = -32;
All floating type values are written the same
temperature: f32 = 5.3;
weight: f64 = 7;
(unlike rust, floating point numbers must not strictly include a decimal point, in rust this would be written as 7.
or 7.0
)type annotation mandatory, cannot be implied
A complex/compound property includes a base type along with x number of sub types which can be mix of simple and complex property types
Tuples and Arrays
position: tuple<f64, f64, f64> = (3, 5.4, 7);
type annotation optional if tuple parameter types are optional
pet_names: array<string> = ["Archie", "Charlie", "Luna", "Milo", "Rocky"];
type annotation optional if array object type is optional
Structs and Hashmaps
passwords: hashmap<u16, string> = {
739341: "abc123",
210405: "football32",
826135: "dragon97"
};
type annotation optional if hashmap key and value object types are optional
passwords = {
739341: string = "abc123",
"210405": string = "football32",
826135: enum<string> = None;
};
Hashmaps and structs are not interchangeable as there are some key differences
Type annotation mandatory; If you want your data to be loaded in as a hashmap, then you must annotate the value as a hashmap, or it will be loaded in as a struct, and vice-versa.
Enums
action: enum = IDLE;
action: enum = SLEEPING;
enum > action: enum<f64> = JUMP(3.6);
enum > action: enum<f64, f64> = RUN(50, 31.2);
enum > action: enum<string> = EAT("Hamburger");
Same enum in rust
enum action {
IDLE,
SLEEPING,
JUMP(f64 /* jump power */),
RUN(f64 /* x-velocity */, f64 /* y-velocity */),
EAT(String /* food item */),
}
Type annotation optional if enum parameter types are optional
The keyword "option" can also be used to subsitute "enum" and works exactly the same as the "enum" keyword; When using option enums you can then use the "option" keyword instead of "enum" to make it more readable. The "option" keyword will work fine for any other enum types, but is strongly discouraged.
{
title: string = "Ferris the crab";
age: usize = 25;
favourite_color: enum = ORANGE;
accessories: array<enum<usize>> = [
SUNGLASSES(3),
GOLDEN_SHOES(1)
];
}
Tabbing is recomended but not mandatory, and is one tab level is expected each nested value from the root object
Snake case property indexes is recommended but not mandatory
New lines are recommended but not mandatory and is expected after the first character in each object, and after the end of each property (after the semicolon)