Rust reqwest示例json代码无法编译

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rust reqwest示例json代码无法编译相关的知识,希望对你有一定的参考价值。

example for dynamic json with reqwest

reqwest

无法使用extern crate reqwest; extern crate tokio; extern crate serde_json; // added to after upgrade to 1.39.0 #[tokio::main] async fn main() -> Result<(), reqwest::Error> { let echo_json: serde_json::Value = reqwest::Client::new() .post("https://jsonplaceholder.typicode.com/posts") .json(&serde_json::json!({ "title": "Reqwest.rs", "body": "https://docs.rs/reqwest", "userId": 1 })) .send() .await? .json() .await?; println!("{:#?}", echo_json); // Object( // { // "body": String( // "https://docs.rs/reqwest" // ), // "id": Number( // 101 // ), // "title": String( // "Reqwest.rs" // ), // "userId": Number( // 1 // ) // } // ) Ok(()) } 1.38.0为rustc reqwest = "0.9.22"进行编译:

tokio = "0.2.2"

此问题已通过以下Ömer的评论进行了升级解决,但现在下一个问题是

   Compiling pin-project-lite v0.1.1
error: `core::slice::<impl [T]>::len` is not yet stable as a const fn
   --> /Users/mick/.cargo/registry/src/github.com-1ecc6299db9ec823/bytes-0.5.2/src/bytes.rs:121:18
    |
121 |             len: bytes.len(),
    |                  ^^^^^^^^^^^

error: aborting due to previous error

error: Could not compile `bytes`.

和下一个error[E0433]: failed to resolve: could not find `main` in `tokio` --> main.rs:5:10 | 5 | #[tokio::main] | ^^^^ could not find `main` in `tokio` error[E0277]: the trait bound `std::result::Result<reqwest::Response, reqwest::Error>: std::future::Future` is not satisfied --> main.rs:7:40 | 7 | let echo_json: serde_json::Value = reqwest::Client::new() | ________________________________________^ 8 | | .post("https://jsonplaceholder.typicode.com/posts") 9 | | .json(&serde_json::json!({ 10 | | "title": "Reqwest.rs", ... | 14 | | .send() 15 | | .await? | |______________^ the trait `std::future::Future` is not implemented for `std::result::Result<reqwest::Response, reqwest::Error>` error[E0277]: `main` has invalid return type `impl std::future::Future` --> main.rs:6:20 | 6 | async fn main() -> Result<(), reqwest::Error> { | ^^^^^^^^^^^^^^^^^^^^^^^^^^ `main` can only return types that implement `std::process::Termination` | = help: consider using `()`, or a `Result` error: aborting due to 3 previous errors Some errors have detailed explanations: E0277, E0433. For more information about an error, try `rustc --explain E0277`. error: could not compile `webtrekk`. To learn more, run the command again with --verbose.

reqwest = "0.10.0-alpha.2" tokio = { version = "0.2.2", features = ["macros"] } serde_json = "1.0.44"

如何解决?

答案

您的示例来自➜ rust git:(master) ✗ cargo run Updating crates.io index error: failed to select a version for `tokio`. ... required by package `reqwest v0.10.0-alpha.2` ... which is depended on by `webtrekk v0.1.0 (/Users/mick/repo/webtrekk-client/rust)` versions that meet the requirements `= 0.2.0-alpha.6` are: 0.2.0-alpha.6 all possible versions conflict with previously selected packages. previously selected package `tokio v0.2.2` ... which is depended on by `webtrekk v0.1.0 (/Users/mick/repo/webtrekk-client/rust)` failed to select a version for `tokio` which could resolve this conflict ,并使用Rust 1.39与以下https://github.com/seanmonstar/reqwest/blob/master/examples/json_dynamic.rs一起使用:

Cargo.toml

以上是关于Rust reqwest示例json代码无法编译的主要内容,如果未能解决你的问题,请参考以下文章

使用 reqwest库,json,ajax传递api数据

Rust 和 Serde JSON 反序列化示例?

项目实战之AJAX访问及相关问题整理

Rust Diesel 无法编译并出现链接器错误

用匹配结果读取 Rust 中的行

Rust基础之理解Box<T>