serde_qs 项目使用教程
serde_qsSerde support for querystring-style strings项目地址:https://gitcode.com/gh_mirrors/se/serde_qs
项目介绍
serde_qs
是一个 Rust 库,旨在为查询字符串风格的字符串提供 Serde 支持。查询字符串没有正式定义,通常采用嵌套的 URL 编码查询的形式。该库旨在与 qs
的语法以及 Rack::Utils::parse_nested_query
实现兼容。对于不需要嵌套 URL 参数的用户,强烈推荐使用 serde_urlencoded
库,它对于简单输入的反序列化性能几乎肯定会更好。
项目快速启动
安装
首先,在 Cargo.toml
文件中添加 serde_qs
依赖:
[dependencies]
serde_qs = "0.13.0"
serde = { version = "1.0", features = ["derive"] }
示例代码
以下是一个简单的示例,展示如何使用 serde_qs
进行序列化和反序列化:
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Address {
city: String,
postcode: String,
}
#[derive(Serialize, Deserialize, Debug)]
struct QueryParams {
name: String,
id: u32,
phone: String,
address: Address,
user_ids: Vec<u32>,
}
fn main() {
let params = QueryParams {
name: "Acme".to_string(),
id: 42,
phone: "12345".to_string(),
address: Address {
city: "Carrot City".to_string(),
postcode: "12345".to_string(),
},
user_ids: vec![1, 2, 3, 4],
};
// 序列化
let serialized = serde_qs::to_string(¶ms).unwrap();
println!("Serialized: {}", serialized);
// 反序列化
let deserialized: QueryParams = serde_qs::from_str(&serialized).unwrap();
println!("Deserialized: {:?}", deserialized);
}
应用案例和最佳实践
嵌套结构处理
serde_qs
支持嵌套的查询字符串,这对于处理复杂的数据结构非常有用。例如,以下是一个嵌套结构的示例:
#[derive(Serialize, Deserialize, Debug)]
struct User {
name: String,
age: u8,
address: Address,
}
#[derive(Serialize, Deserialize, Debug)]
struct Address {
city: String,
postcode: String,
}
let user = User {
name: "Alice".to_string(),
age: 30,
address: Address {
city: "Wonderland".to_string(),
postcode: "12345".to_string(),
},
};
let serialized = serde_qs::to_string(&user).unwrap();
println!("Serialized: {}", serialized);
let deserialized: User = serde_qs::from_str(&serialized).unwrap();
println!("Deserialized: {:?}", deserialized);
严格模式与非严格模式
serde_qs
支持两种操作模式:严格模式和非严格模式。可以通过 Config
来指定:
use serde_qs::Config;
let config = Config::new(5, false); // 非严格模式
let deserialized: QueryParams = config.deserialize_str(&serialized).unwrap();
典型生态项目
actix-web
serde_qs
可以与 actix-web
框架结合使用,处理查询字符串参数:
use actix_web::{web, App, HttpServer, Responder};
use serde::Deserialize;
#[derive(Deserialize)]
struct Info {
username: String,
}
async fn index(info: web::Query<Info>) -> impl Responder {
format!("Welcome {}!", info.username)
}
#[actix_web::main]
async fn main() -> std::
serde_qsSerde support for querystring-style strings项目地址:https://gitcode.com/gh_mirrors/se/serde_qs