zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use actix_web::web;
use actix_web::HttpRequest;
use actix_web::HttpResponse;
use actix_web::Responder;

use std::collections::HashMap;
use std::str::FromStr;

use crate::commons::Error;

use crate::core::request2::Render;
use crate::core::R;

pub mod connection;
pub mod ctx;
pub mod messages;
pub mod server;

pub use connection::*;
pub use ctx::*;
pub use messages::*;
pub use server::*;

pub use crate::websocket::devstreams;

// WebSocket handshake and start `Server` actor.
pub async fn ws(
    request: HttpRequest,
    stream: web::Payload,
    state: web::Data<ctx::AppState>,
) -> core::result::Result<HttpResponse, actix_web::Error> {
    let srv = state.ss.clone();
    actix_web_actors::ws::start(Connection::new(srv), &request, stream)
}

// 广播一条消息
pub async fn broadcast(
    request: HttpRequest,
    state: web::Data<ctx::AppState>,
    query: web::Query<HashMap<String, String>>,
    data: actix_web::web::Bytes,
) -> impl Responder {
    let _ty = query
        .get("ty")
        .ok_or_else(|| Error::invalid_request("Missing query string parameter: ty"))?;

    let _data = crate::commons::bytes_to_string(data.to_vec())?;

    state.ss.do_send(messages::Broadcast {
        ty: OutputMessageType::from_str(_ty).map_err(|e| anyhow::anyhow!(e))?,
        msg: _data,
    });

    request.json(200, R::ok(true))
}