2 个版本 (1 个稳定版)

1.0.0 2021 年 9 月 26 日
0.1.0 2021 年 9 月 25 日

#1032HTTP 服务器

MIT 许可证

7KB
96

安培

Rust 网络编程宏包

一个简单的包,具有将函数模式绑定到框架 actix-web 的属性。

#[GET("/")]
fn index() {
    "nice"
}

变为

#[get("/")]
async fn index() -> impl Responder {
    "nice"
}

总共有 3 个属性

#[GET("/"]
#[POST("/")]
#[SERVER]

POST 需要设置为 POST 请求(还有一个专门处理结构体的 POST 请求的特殊类型,即 actix_web::web::Form;)

#[derive(Debug)]
#[derive(Deserialize)]  // (yea, use serde)
struct User {
    username: String,
    email: String,
    password: String
}

#[POST("/")]
fn index_analyz(data: Post<User>) {
    println!("{:#?}", data);
    "nice"
}

SERVER 设置为你的网站主页面

#[SERVER]
fn main() {
    HttpServer::new(|| {
        App::new()
            .service(index)
            .service(index_analyz)
    })
    .bind(("127.0.0.1", 8080))?
    .run()
    .await
}

以及一些宏设置,用于为响应体设置 HttpResponce。

#[derive(Template)]
#[template(path="../static/index.html")] // askama template render engine
struct MyPage {
    content: String
}

#[GET("/a")]
fn foo() {
    html!("<h1>html text!</h1>")
    load!("compile-time static load of html file use include_str! macro")
    template!(MyPage { content: "nice".to_string() })
    // expression of struct. implemented for .render() in askama engine
}

还有一个函数,用于使用正则表达式解析 URL(必须在 tokio 运行时中运行,已在该包中重新导入)

let prs; {
    let tokioRuntime = Runtime::new().unwrap();
    prs = tokioRuntime.spawn(parsing(
        "https://your/page/to/parse",
        "<h1>[^<]+</h1>|<h2>[^<]+</h2>|<h3>[^<]+</h3>|<h4>[^<]+</h4>")
    ).await.unwrap();
}
let prs = prs.unwrap();
println!("{:?}", prs);

重新导入的包

actix-web = "3"
regex = "1.5.4"
tokio = { version = "1", features = ["rt", "rt-multi-thread"] }
actix-files = "0.3"

依赖

~24–37MB
~676K SLoC