tokio
可以选择所有features
# cargo.toml
[dependencies]
tokio = { version = "1.50.0", features = ["full"] }
使用时,fn main要求
#[tokio::main]
async fn main() -> Result<()> {
}
在其他async函数内部,可以对那些,返回值是tokio中类型,如Tcplistener、Tcpstream的,链式使用await等关键字
let listener = Tcplistener::bind(addr).await?;
match listener.accept().await {
}
注意,async fn相当于一个fn返回一个future类型,因此有await关键字。
切换async代码块,只会发生在当前的运行到达await并且阻塞时。
serde和serde_json
serde是序列化库,而从rust数据结构到具体的数据结构通过serde_json等实现。
添加项目依赖
[dependencies]
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
如果不添加derive feature,那么由于不能使用属性#[derive(Serialize, Deserialize)],自定义数据结构将默认不能被序列化和反序列化。
use serde::{Serialize, Deserialize};
use serde_json::Result;
fn main() -> Result<()> {
let data = r#"
{
"name": "John Doe",
"age": 30,
"is_student": false
}
"#;
#[derive(Serialize, Deserialize, Debug)]
struct Person {
name: String,
age: u32,
is_student: bool,
}
let person: Person = serde_json::from_str(data)?;
println!("{:?}", person);
let str = serde_json::to_string(&person)?;
println!("{}", str);
Ok(())
}
其中,from_str将json文本转成Person对象,而to_string将Person对象转成json文本
comment 评论区
star_outline 咱快来抢个沙发吧!