on master help sign in
commite64632b0f23c14855f4b64e1a3e82f8450e98580 authoriko <mail@iko.soy> dateWed 13 Nov 2024, 16:35 (2 years ago) parente021372
1 file changed+10−53
wock-web/src/lib.rs+10−53
wock-web/src/lib.rs+10−53
@@ -10,12 +10,11 @@ use dodrio::{
1010};
1111use nock::{
1212 cue::cue_bytes,
13− interpreter::{generate_interpreter_context, slam, InterpreterContext},
13+ interpreter::{generate_interpreter_context, ram_ttanks, slam, InterpreterContext},
1414 noun::{cell, Noun},
15− wash,
1615};
1716use wasm_bindgen::prelude::*;
18−use wasm_bindgen_futures::{spawn_local, JsFuture};
17+use wasm_bindgen_futures::JsFuture;
1918use web_sys::{console::error_1, Element};
2019
2120#[wasm_bindgen]
@@ -29,41 +28,11 @@ extern "C" {
2928 fn error(s: &str);
3029}
3130
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−
6131#[derive(Clone)]
6232struct WockApp {
6333 nock: Rc<Noun>,
6434 ctx: RefCell<InterpreterContext>,
6535 model: Rc<Noun>,
66− urbit: Rc<Urbit>,
6736}
6837
6938impl<'a> Render<'a> for WockApp {
@@ -75,13 +44,9 @@ impl<'a> Render<'a> for WockApp {
7544 ) {
7645 Ok(sail) => render_sail(cx, sail),
7746 Err(tanks) => {
78− let wock_app = self.clone();
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));
84− });
47+ let str = ram_ttanks(&mut (*self).ctx.borrow_mut(), tanks);
48+ error_1(&JsValue::from_str(&str));
49+
8550 panic!("Could not render");
8651 }
8752 }
@@ -142,13 +107,11 @@ fn render_sail<'a>(ctx: &mut RenderContext<'a>, manx: Rc<Noun>) -> Node<'a> {
142107 vdom.schedule_render();
143108 }
144109 Err(tanks) => {
145− let urbit = app.urbit.clone();
146110 let mut ctx = ctx.borrow_mut().clone();
147− spawn_local(async move {
148− let urbit = urbit.get().await;
149− let str = wash(&mut ctx, &urbit, tanks);
150− error_1(&JsValue::from_str(&str));
151− });
111+
112+ let str = ram_ttanks(&mut ctx, tanks);
113+ error_1(&JsValue::from_str(&str));
114+
152115 error(&*format!(
153116 "Application failed to process event: {}",
154117 event
@@ -216,12 +179,7 @@ pub async fn main(path: &str) {
216179 let model = match model {
217180 Ok(model) => model,
218181 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);
225183 error_1(&JsValue::from_str(&str));
226184 panic!("Could not load initial model.");
227185 }
@@ -233,7 +191,6 @@ pub async fn main(path: &str) {
233191 nock,
234192 model,
235193 ctx: RefCell::new(ctx),
236− urbit: Rc::new(Urbit::new()),
237194 },
238195 )
239196 .forget();