blob: 17249c3384941f684d5093b7c0d4789d4b5e690f [file] [log] [blame]
//! This example illustrates the way to send and receive statically typed JSON.
//!
//! In contrast to the arbitrary JSON example, this brings up the full power of
//! Rust compile-time type system guaranties though it requires a little bit
//! more code.
// These require the `serde` dependency.
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
struct Post {
id: Option<i32>,
title: String,
body: String,
#[serde(rename = "userId")]
user_id: i32,
}
// This is using the `tokio` runtime. You'll need the following dependency:
//
// `tokio = { version = "1", features = ["full"] }`
#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let new_post = Post {
id: None,
title: "Reqwest.rs".into(),
body: "https://docs.rs/reqwest".into(),
user_id: 1,
};
let new_post: Post = reqwest::Client::new()
.post("https://jsonplaceholder.typicode.com/posts")
.json(&new_post)
.send()
.await?
.json()
.await?;
println!("{:#?}", new_post);
// Post {
// id: Some(
// 101
// ),
// title: "Reqwest.rs",
// body: "https://docs.rs/reqwest",
// user_id: 1
// }
Ok(())
}