例如,当用户访问时http://127.0.0.1:8080/hello,如果查询参数id为1,则返回纯文本响应。如果id是2,给出一个json结构。
概括:
| id(输入) | 状态码 | 内容类型 | 身体 |
|---|---|---|---|
| 1 | 200 | 应用程序/json | {“名称”:“世界”} |
| 2 | 400 | 文本/纯文本 | 没有这样的人 |
struct HelloParam {
id: u16,
}
struct HelloResponse {
name: String,
}
async fn hello_get(Query(params): Query<HelloParam>) -> Response {
// how to implement it?
}
let router= Router::new().route("/hello", get(hello_get));
Run Code Online (Sandbox Code Playgroud) 我对 Rust 很陌生,并且有 OOP 背景。所以,也许我误解了一些 Rust 基础知识。
我想用 serde 解析固定的 json 结构。该结构代表不同的消息类型之一。每条消息都有一个数字type属性来区分它。各个消息类型的确切结构大多不同,但它们也可以是相同的。
{"type": 1, "sender_id": 4, "name": "sender", ...}
{"type": 2, "sender_id": 5, "measurement": 3.1415, ...}
{"type": 3, "sender_id": 6, "measurement": 13.37, ...}
...
Run Code Online (Sandbox Code Playgroud)
首先,我定义了 aenum来区分消息类型,也struct为每种类型的消息定义了 a ,而没有存储类型的字段。
#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "type")]
enum Message {
T1(Type1),
T2(Type2),
T3(Type3),
// ...
}
#[derive(Debug, Serialize, Deserialize)]
struct Type1 {
sender_id: u32,
name: String,
// ...
}
#[derive(Debug, Serialize, Deserialize)]
struct Type2 {
sender_id: u32, …Run Code Online (Sandbox Code Playgroud)