run_backend/
run_backend.rs1use josie_core::program::{execute_program, parse_program};
7use josie_core::{read_program, Operators};
8use serde_json::json;
9use std::process;
10
11static BACKEND_SCRIPT: &str = include_str!("backend_shape.josie");
12
13fn main() {
14 let mut doc = read_program(BACKEND_SCRIPT).unwrap_or_else(|e| {
15 eprintln!("parse: {:?}", e);
16 process::exit(1);
17 });
18
19 let raw_people = json!([
21 {
22 "id": 1,
23 "first": "Jane",
24 "last": "Doe",
25 "age": 28,
26 "city": "London",
27 "country": "UK",
28 "email": "jane.doe@example.com",
29 "phone": "+44 20 7946 0958",
30 "tags": ["customer", "vip"]
31 },
32 {
33 "id": 2,
34 "first": "Bob",
35 "last": "Smith",
36 "age": 34,
37 "city": "Berlin",
38 "country": "DE",
39 "email": "bob.smith@example.com",
40 "phone": "+49 30 12345678",
41 "tags": ["partner"]
42 },
43 {
44 "id": 3,
45 "first": "Alice",
46 "last": "Wu",
47 "age": 41,
48 "city": "Singapore",
49 "country": "SG",
50 "email": "alice.wu@example.com",
51 "phone": null,
52 "tags": []
53 },
54 ]);
55 doc["state"]["server"] = json!({ "raw_people": raw_people });
56
57 let program = parse_program(&doc).unwrap_or_else(|e| {
58 eprintln!("validate: {} - {}", e.code, e.message);
59 process::exit(1);
60 });
61 let operators = Operators::new();
62 let out = execute_program(&program, &operators).unwrap_or_else(|e| {
63 eprintln!("run: {} - {}", e.code, e.message);
64 process::exit(1);
65 });
66
67 println!("server.response (custom JSON shape):");
68 println!("{}", serde_json::to_string_pretty(&out.state.server["response"]).unwrap());
69}