aex 0.1.0

A web server for rust.
Documentation
AEX.rs - Rust 异步 HTTP + WebSocket 框架

简介
----
AEX.rs 是一个轻量级异步 Rust Web 框架,提供 HTTP 路由、中间件和 WebSocket 支持。
框架以 cargo aex 发布,核心功能包括:
- HTTP 路由处理
- 中间件链
- WebSocket 升级与消息处理
- 异步执行,基于 Tokio Runtime

核心概念
--------
1. Router:Trie 树路由,支持静态和动态路径匹配
2. Handler:异步处理 HTTP 请求,返回 bool 表示是否继续中间件链
3. Middleware:异步中间件,可组合多个功能
4. WebSocket:提供握手、发送/接收消息、Ping/Pong、关闭连接
5. Executor:统一封装 Handler 和 Middleware 类型

宏使用
--------
框架提供路由生成宏,快速创建 Handler + 可选 Middleware

HTTP 方法宏:
- get!(path, handler [, middleware])
- post!(path, handler [, middleware])
- put!, delete!, patch!, options!, head!, trace!, connect!
- all!(path, handler [, middleware]) 匹配所有方法

示例:
let get_home = get!("/home", |ctx: &mut HTTPContext| {
    Box::pin(async move {
        ctx.res.body.push("Welcome!".to_string());
        true
    })
});

可选中间件:
let ws_mw = WebSocket::to_middleware(ws);
let get_ws = get!("/ws", |ctx: &mut HTTPContext| {
    Box::pin(async { true })
}, vec![ws_mw]);

route! 宏(注册路由):
route!(root, get_home);
route!(root, get_ws);

说明:
- 如果方法为 "*",表示匹配所有 HTTP 方法
- Handler 与 Middleware 自动封装为 Arc<Executor>
- 支持多个中间件组合

WebSocket 中间件
-----------------
使用 WebSocket::to_middleware(ws) 生成中间件,可用于路由注册。
示例:
let ws = WebSocket {
    on_text: Some(Arc::new(|_ws, _ctx, msg| Box::pin(async move {
        println!("收到文本: {}", msg);
        true
    }))),
    on_binary: Some(Arc::new(|_ws, _ctx, data| Box::pin(async move {
        println!("收到二进制数据: {:?}", data);
        true
    }))),
};

let ws_mw = WebSocket::to_middleware(ws);

let get_ws = get!("/ws", |ctx: &mut HTTPContext| Box::pin(async { true }), vec![ws_mw]);
route!(root, get_ws);

访问 /ws 即可完成 WebSocket 升级和消息处理

框架优势
---------
- 高度异步,适配 Tokio
- 简洁宏设计,快速生成路由和中间件
- 完整 WebSocket 支持(握手、消息、Ping/Pong、关闭)
- Middleware 链条灵活,可组合 WebSocket、认证、日志等
- Router 支持静态、动态路径匹配及全方法路由

目录结构
---------
src/
  aex.rs         # 框架核心
  router.rs      # Router + Trie 节点
  websocket.rs   # WebSocket 核心功能
  types.rs       # HTTPContext, Executor, Handler 类型
  macros.rs      # get!, post!, route! 等宏

示例启动
-----------
#[tokio::main]
async fn main() {
    let mut root = Router::new(NodeType::Static("root".into()));

    let ws = WebSocket {
        on_text: Some(Arc::new(|_ws, _ctx, msg| Box::pin(async move {
            println!("{}", msg);
            true
        }))),
        on_binary: None,
    };

    let ws_mw = WebSocket::to_middleware(ws);

    let get_ws = get!("/ws", |ctx: &mut HTTPContext| Box::pin(async { true }), vec![ws_mw]);
    route!(root, get_ws);

    AexServer::new(root).bind("127.0.0.1:8080").await.unwrap().run().await;
}

说明:
- 路由 /ws 支持 WebSocket 升级
- 中间件链可组合多个功能
- 支持 HTTP 普通路由与 WebSocket 混合注册