首页未分类

Rust三度【3】——tokio和serde

Gumdrop
阅读字号

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文本

全文完

讨论与留言 0

还没有留言,欢迎分享你的想法。

写下你的想法