razer 0.1.5

A server side way to controll your website with rust
Documentation
use std::sync::Mutex;

use lazy_static::lazy_static;

use razer::event::event_type::Event::{EVAL, JS};
use razer::event::handler::EventHandler;
use razer::listener::Listener;
use razer::send::{broadcast, send};
use razer::Sender;
use razer::Value;

lazy_static! {
    static ref MESSAGES: Mutex<Vec<String>> = Mutex::new(Vec::new());
}

#[derive(Copy)]
pub struct Handler;

impl Clone for Handler {
    fn clone(&self) -> Self {
        *self
    }
}

impl EventHandler for Handler {
    fn load(&self, _event: Value, ctx: &Sender) {
        send(
            ctx,
            JS,
            &format!(
                "document.getElementById(\"text\").innerHTML += \"<p>{}</p>\"",
                MESSAGES.lock().unwrap().join("</p><p>")
            ),
        )
            .unwrap();
    }

    fn keydown(&self, event: Value, ctx: &Sender) {
        if event["key"].as_str().unwrap() == "Enter" && event["srcElement"]["id"] == "input" {
            send(ctx, EVAL, "document.getElementById(\"input\").value").unwrap();
            send(ctx, JS, "document.getElementById(\"input\").value = \"\"").unwrap();
        }
    }

    fn eval(&self, event: Value, ctx: &Sender) {
        MESSAGES
            .lock()
            .unwrap()
            .push(event["event"].as_str().unwrap().to_string());
        broadcast(
            ctx,
            JS,
            &format!(
                "document.getElementById(\"text\").innerHTML += \"<p>{}</p>\"",
                event["event"].as_str().unwrap().replace("\"", "\\\\\"")
            ),
        );
    }
}

fn main() {
    Listener::new().start(Handler);
}