rustimate-client 0.1.0

WASM web client sources for rustimate
use crate::ctx::ClientContext;

use anyhow::Result;
use std::rc::Rc;
use std::sync::RwLock;

pub(crate) fn wire_socket(rc: &Rc<RwLock<ClientContext>>) {
  let on_open = {
    let ctx = Rc::clone(rc);
    Box::new(move |_j| {
      match crate::socket::ws_handlers::on_open(&ctx) {
        Ok(_) => {}
        Err(e) => error!("Error encountered running [on_open]: {}", e)
      };
    })
  };
  let on_message = {
    let ctx = Rc::clone(rc);
    Box::new(move |m: web_sys::MessageEvent| {
      match crate::socket::ws_handlers::on_message(&ctx, &m) {
        Ok(_) => {}
        Err(e) => error!("Error encountered running [on_message]: {}", e)
      };
    })
  };
  let on_error = {
    let ctx = Rc::clone(rc);
    Box::new(move |e: web_sys::ErrorEvent| match crate::socket::ws_handlers::on_error(&ctx, &e) {
      Ok(_) => {}
      Err(e) => error!("Error encountered running [on_error]: {}", e)
    })
  };
  let on_close = {
    let ctx = Rc::clone(rc);
    Box::new(move |_x| match crate::socket::ws_handlers::on_close(&ctx) {
      Ok(_) => {}
      Err(e) => error!("Error encountered running [on_close]: {}", e)
    })
  };

  let c = rc.read().expect("Cannot lock ClientContext for read");
  c.socket().set_callbacks(on_open, on_message, on_error, on_close);
}

pub(crate) fn on_load(ctx: &ClientContext) -> Result<()> {
  ctx.replace_template("socket-status", maud::html!("Connected"))
}