on master help sign in
e64632biko
wock-web/src/lib.rs+10−53
@@ -10,12 +10,11 @@ use dodrio::{
10};
10};
11use nock::{
11use nock::{
12 cue::cue_bytes,
12 cue::cue_bytes,
13− interpreter::{generate_interpreter_context, slam, InterpreterContext},
13+ interpreter::{generate_interpreter_context, ram_ttanks, slam, InterpreterContext},
14 noun::{cell, Noun},
14 noun::{cell, Noun},
15− wash,
16};
15};
17use wasm_bindgen::prelude::*;
16use wasm_bindgen::prelude::*;
18−use wasm_bindgen_futures::{spawn_local, JsFuture};
17+use wasm_bindgen_futures::JsFuture;
19use web_sys::{console::error_1, Element};
18use web_sys::{console::error_1, Element};
20
19
21#[wasm_bindgen]
20#[wasm_bindgen]
@@ -29,41 +28,11 @@ extern "C" {
29 fn error(s: &str);
28 fn error(s: &str);
30}
29}
31
30
32−#[derive(Clone)]
33−struct Urbit {
34− urbit: RefCell<Option<Rc<Noun>>>,
35−}
36−
37−impl Urbit {
38− fn new() -> Urbit {
39− Urbit {
40− urbit: RefCell::new(None),
41− }
42− }
43−
44− async fn get(self: &Self) -> Rc<Noun> {
45− match self.urbit.borrow().clone() {
46− Some(urbit) => urbit,
47− None => {
48− let urbit = load_nock("/urbit.nock").await.unwrap_or_else(|err| {
49− error_1(&err);
50− panic!("Could not load urbit.")
51− });
52−
53− self.urbit.replace(Some(urbit.clone()));
54−
55− urbit
56− }
57− }
58− }
59−}
60−
61#[derive(Clone)]
31#[derive(Clone)]
62struct WockApp {
32struct WockApp {
63 nock: Rc<Noun>,
33 nock: Rc<Noun>,
64 ctx: RefCell<InterpreterContext>,
34 ctx: RefCell<InterpreterContext>,
65 model: Rc<Noun>,
35 model: Rc<Noun>,
66− urbit: Rc<Urbit>,
67}
36}
68
37
69impl<'a> Render<'a> for WockApp {
38impl<'a> Render<'a> for WockApp {
@@ -75,13 +44,9 @@ impl<'a> Render<'a> for WockApp {
75 ) {
44 ) {
76 Ok(sail) => render_sail(cx, sail),
45 Ok(sail) => render_sail(cx, sail),
77 Err(tanks) => {
46 Err(tanks) => {
78− let wock_app = self.clone();
47+ let str = ram_ttanks(&mut (*self).ctx.borrow_mut(), tanks);
79− let mut ctx = (*self.ctx.borrow()).clone();
80− spawn_local(async move {
81− let urbit = wock_app.urbit.get().await;
82− let str = wash(&mut ctx, &urbit, tanks);
83− error_1(&JsValue::from_str(&str));
48+ error_1(&JsValue::from_str(&str));
84− });
49+
85 panic!("Could not render");
50 panic!("Could not render");
86 }
51 }
87 }
52 }
@@ -142,13 +107,11 @@ fn render_sail<'a>(ctx: &mut RenderContext<'a>, manx: Rc<Noun>) -> Node<'a> {
142 vdom.schedule_render();
107 vdom.schedule_render();
143 }
108 }
144 Err(tanks) => {
109 Err(tanks) => {
145− let urbit = app.urbit.clone();
146 let mut ctx = ctx.borrow_mut().clone();
110 let mut ctx = ctx.borrow_mut().clone();
147− spawn_local(async move {
111+
148− let urbit = urbit.get().await;
149− let str = wash(&mut ctx, &urbit, tanks);
112+ let str = ram_ttanks(&mut ctx, tanks);
150− error_1(&JsValue::from_str(&str));
113+ error_1(&JsValue::from_str(&str));
151− });
114+
152 error(&*format!(
115 error(&*format!(
153 "Application failed to process event: {}",
116 "Application failed to process event: {}",
154 event
117 event
@@ -216,12 +179,7 @@ pub async fn main(path: &str) {
216 let model = match model {
179 let model = match model {
217 Ok(model) => model,
180 Ok(model) => model,
218 Err(tanks) => {
181 Err(tanks) => {
219− let urbit = load_nock("/urbit.nock").await.unwrap_or_else(|err| {
220− error_1(&err);
221− panic!("Could not load urbit.")
222− });
223−
224− let str = wash(&mut ctx, &urbit, tanks);
182+ let str = ram_ttanks(&mut ctx, tanks);
225 error_1(&JsValue::from_str(&str));
183 error_1(&JsValue::from_str(&str));
226 panic!("Could not load initial model.");
184 panic!("Could not load initial model.");
227 }
185 }
@@ -233,7 +191,6 @@ pub async fn main(path: &str) {
233 nock,
191 nock,
234 model,
192 model,
235 ctx: RefCell::new(ctx),
193 ctx: RefCell::new(ctx),
236− urbit: Rc::new(Urbit::new()),
237 },
194 },
238 )
195 )
239 .forget();
196 .forget();