小编duc*_*ale的帖子

如何将 serde_json::error::Error 转换为 reqwest::error::Error?

reqwest v0.9 将 serde v1.0 作为依赖项,因此实现了将 serde_json 错误转换为 reqwest error

在我的代码中,我正在使用 serde_json 而不是使用 reqwest.json()附带的方法进行一些反序列化。

// reqwest = "0.9"
// serde = { version = "1.0", features = ["derive"] }
// serde_json = "1.0"

pub fn get_meta(client: &reqwest::Client) -> Result<Meta, reqwest::Error> {
    let mut resp = client
        .get("http://localhost:8080/requests/playlist.json")
        .send()?;

    let data: Value = serde_json::from_str(&resp.text()?).unwrap();
    let data = data["children"][0]["children"].clone();
    let metas: Vec<Meta> = serde_json::from_value(data).unwrap();
    let meta: Meta = metas.last().expect("nothing is playing").clone();
    Ok(meta)
}
Run Code Online (Sandbox Code Playgroud)

目前,我试图将 serde_json 错误作为 reqwest 错误返回。更改 …

rust

6
推荐指数
1
解决办法
1027
查看次数

为什么有时可以从右侧折叠无限列表?

当我被困在家庭作业 6 的第 5 部分时,我一直在学习优秀的CIS 194 课程。它围绕着在没有任何可分性测试的情况下实现标尺功能

我发现可以通过将无限列表中的值连续插入累加器来构建标尺函数。

nats = [0,1,2,3,..]
[3]
[2,3,2]
[1,2,1,3,1,2,1]
[0,1,0,2,0,1,0,3,0,1,0,2,0]
Run Code Online (Sandbox Code Playgroud)

然后我尝试为Stream数据类型实现这个算法,它是一个没有列表的列表nil

nats = [0,1,2,3,..]
[3]
[2,3,2]
[1,2,1,3,1,2,1]
[0,1,0,2,0,1,0,3,0,1,0,2,0]
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,由于我试图从右侧折叠,因此出现了 stackoverflow 错误。然而,我很惊讶地看到相同的算法适用于普通的无限列表。

data Stream a = Cons a (Stream a)

streamToList :: Stream a -> [a]
streamToList (Cons x xs) = x : streamToList xs

instance Show a => Show (Stream a) where
  show = show . take 20 . streamToList

streamFromSeed :: (a -> a) -> …
Run Code Online (Sandbox Code Playgroud)

haskell lazy-evaluation

6
推荐指数
2
解决办法
127
查看次数

如何在 WASI 中使用 Rust 的 async/await 语法

我想用Cargo-wasi编译以下代码。

// reqwest = { version = "0.11", features = ["json"] }
// tokio = { version = "1", features = ["full"] }

use std::collections::HashMap;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let resp = reqwest::get("https://httpbin.org/ip")
        .await?
        .json::<HashMap<String, String>>()
        .await?;
    println!("{:#?}", resp);
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

尝试编译后,出现以下错误,因为mio 目前不支持 WASI

$ cargo wasi run
   Compiling mio v0.7.9
   Compiling parking_lot v0.11.1
   Compiling serde_json v1.0.64
   Compiling idna v0.2.2
error[E0432]: unresolved import `crate::sys::IoSourceState`
  --> /home/ducaale/.cargo/registry/src/github.com-1ecc6299db9ec823/mio-0.7.9/src/io_source.rs:12:5
   |
12 | use crate::sys::IoSourceState;
   | …
Run Code Online (Sandbox Code Playgroud)

rust wasi

5
推荐指数
1
解决办法
2127
查看次数

标签 统计

rust ×2

haskell ×1

lazy-evaluation ×1

wasi ×1