#json #rocket #server-api #web-server #server #web #api

rocketjson_macro

用于处理 Json 和 Rocket 的 crate

10 个稳定版本

1.2.1 2022 年 6 月 22 日
1.2.0 2021 年 12 月 3 日
1.1.3 2021 年 11 月 25 日
1.1.2 2021 年 10 月 8 日
1.0.1 2021 年 8 月 31 日

#63 in #server-api

每月 33 次下载
rocketjson 中使用

MIT/Apache

23KB
302

rocketjson

Current Crates.io Version

用于处理 Json 和 Rocket 的 crate。
最终目标是使经过验证的 Structs 以 Json 格式进入和离开端点,同时所有操作都在后台完成。

文档

文档位于 docs.rs

示例

#[macro_use] extern crate rocket;

#[derive(serde::Deserialize, validator::Validate, rocketjson::JsonBody)]
pub struct RegisterRequest {
   #[validate(length(min = 1))]
   username: String 
}

#[derive(serde::Serialize)]
pub struct RegisterResponse {
   message: String
}

#[post("/register", data="<data>")]
pub fn register(data: RegisterRequest) -> rocketjson::ApiResponse<RegisterResponse> {
   rocketjson::ApiResponse::new(rocket::http::Status::Ok, RegisterResponse { message: format!("Welcome {}", data.username) })
}

#[launch]
fn rocket() -> _ {
    rocket::build()
        .mount("/", routes![register]).
        register("/", vec![rocketjson::error::get_catcher()])
}
  • 输入
{
    "username": "testuser"
}
  • 输出 200 OK
{
    "message": "Welcome testuser"
}
  • 输入
{
    "username": ""
}
  • 输出 400 Bad Request
{
    "username": [
        {
            "code": "length",
            "message": null,
            "params": {
                "value": "",
                "min": 1
            }
        }
    ]
}

许可证

许可证可以是以下之一

依赖关系

~19–51MB
~881K SLoC