mirror of
https://github.com/artegoser/ONLang
synced 2024-12-23 09:33:44 +03:00
feat: yaml support
This commit is contained in:
parent
1b34caa43b
commit
29113c9ff6
3 changed files with 32 additions and 3 deletions
20
Cargo.lock
generated
20
Cargo.lock
generated
|
@ -198,6 +198,7 @@ dependencies = [
|
||||||
"json5",
|
"json5",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"serde_yaml",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -335,6 +336,19 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_yaml"
|
||||||
|
version = "0.9.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "79b7c9017c64a49806c6e8df8ef99b92446d09c92457f85f91835b01a8064ae0"
|
||||||
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
"unsafe-libyaml",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sha-1"
|
name = "sha-1"
|
||||||
version = "0.10.0"
|
version = "0.10.0"
|
||||||
|
@ -416,6 +430,12 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
|
checksum = "15c61ba63f9235225a22310255a29b806b907c9b8c964bcbd0a2c70f3f2deea7"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unsafe-libyaml"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "931179334a56395bcf64ba5e0ff56781381c1a5832178280c7d7f91d1679aeb0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.4"
|
version = "0.9.4"
|
||||||
|
|
|
@ -9,5 +9,6 @@ edition = "2021"
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
json5 = "0.4.1"
|
json5 = "0.4.1"
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
serde_yaml = "0.9"
|
||||||
clap = { version = "3.2", features = ["derive"] }
|
clap = { version = "3.2", features = ["derive"] }
|
||||||
colored = "2"
|
colored = "2"
|
|
@ -20,8 +20,16 @@ impl Interpreter {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn run(&mut self) {
|
pub fn run(&mut self) {
|
||||||
let obj = json5::from_str::<Value>(&self.input).expect("Your json is invalid!");
|
let obj: serde_json::Value = json5::from_str::<Value>(&self.input).unwrap_or_else(|_| {
|
||||||
let arr = obj.as_array().expect("Json must be an array!");
|
serde_yaml::from_str(&self.input)
|
||||||
|
.expect("Your file format is invalid! (supported: json, json5 or yaml)")
|
||||||
|
});
|
||||||
|
let arr = obj.as_array().unwrap_or_else(|| {
|
||||||
|
obj.get("main")
|
||||||
|
.expect("Each program must contain a `{main: [..commands]}` object or be a command array ([..commands])")
|
||||||
|
.as_array()
|
||||||
|
.expect("The program must be an array of commands")
|
||||||
|
});
|
||||||
|
|
||||||
for command in arr {
|
for command in arr {
|
||||||
self.eval_node(command);
|
self.eval_node(command);
|
||||||
|
|
Loading…
Add table
Reference in a new issue