Разбор ответа JSON от запроса GET вызывает асинхронно - PullRequest
0 голосов
/ 20 июня 2019

Я выполняю вызов GET для некоторого API, который, в свою очередь, возвращает мне list объектов JSON. Однако я не мог разобрать это в списке пользовательских структур данных.

Ближайший я мог прийти к

struct Pokemon {
    id: i32,
    name: String,
    height: i32,
    weight: i32,
}

let mut response = client.get("http://pokeapi.co/api/v2/pokemon/111")
    .send()
    .expect("Failed to send request");
if let Ok(pokemon) = response.json::<Pokemon>() {
    println!("{:#?}", pokemon);
}

Может ли кто-нибудь предоставить мне подходящий пример для того же. Кроме того, это стандартный способ сделать это. Я имею в виду, какая разница будет использовать что-то вроде

let url = url.parse().expect("API URL parsing bug");
let request = Request::new(reqwest::Method::GET, url);

self.inner
    .execute(request)
    .map_err(Error::Request)
    .and_then(move |response: Response| {
        ...
    })

1 Ответ

1 голос
/ 20 июня 2019

Чтобы использовать Response::json, вы должны реализовать serde::Deserialize для Pokemon. Вы можете сделать это, добавив следующее в ваш Cargo.toml под [dependencies].

serde = { version = "1.0", features = ["derive"] }

Затем добавьте use serde::Deserialize; вверху вашего файла и измените объявление Pokemon на:

#[derive(Deserialize)]
struct Pokemon {
    id: i32,
    name: String,
    height: i32,
    weight: i32,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...