1use josie_core::program::{execute_program, parse_program};
6use josie_core::{read_program, Operators};
7use std::env;
8use std::fs;
9use std::process;
10
11fn main() {
12 let path = match env::args().nth(1) {
13 Some(p) => p,
14 None => {
15 eprintln!("Usage: run_josie <path.josie>");
16 eprintln!(" e.g. cargo run -p josie-core --example run_josie -- examples/hello.josie");
17 process::exit(1);
18 }
19 };
20 let src = fs::read_to_string(&path).unwrap_or_else(|e| {
21 eprintln!("read {}: {}", path, e);
22 process::exit(1);
23 });
24 let doc = read_program(&src).unwrap_or_else(|e| {
25 eprintln!("parse {}: {:?}", path, e);
26 process::exit(1);
27 });
28 let program = parse_program(&doc).unwrap_or_else(|e| {
29 eprintln!("validate {}: {} ({})", path, e.code, e.message);
30 process::exit(1);
31 });
32 let operators = Operators::new();
33 let out = execute_program(&program, &operators).unwrap_or_else(|e| {
34 eprintln!("run {}: {} - {}", path, e.code, e.message);
35 process::exit(1);
36 });
37 println!("value: {}", serde_json::to_string_pretty(&out.value).unwrap());
38 let state_json = serde_json::json!({
39 "client": out.state.client,
40 "server": out.state.server,
41 });
42 println!("state: {}", serde_json::to_string_pretty(&state_json).unwrap());
43}