Avatar ·

Como fazer uma requisição HTTP em Rust?

Olá a todos! Comecei a estudar Rust e me deparei com a tarefa de fazer uma requisição HTTP. Preciso enviar uma requisição GET para uma API externa e obter uma resposta JSON. Tentei usar a biblioteca padrão, mas, pelo que entendi, ela não tem um cliente HTTP embutido.

Tentei escrever algo assim:

use std::io::Read;

fn main() {
    let mut response = reqwest::blocking::get("https://api.example.com/data").unwrap();
    let mut body = String::new();
    response.read_to_string(&mut body).unwrap();
    println!("{}", body);
}

Mas recebo o erro: error[E0432]: unresolved import 'reqwest'. Aparentemente, preciso adicionar a dependência no Cargo.toml. Como conectar corretamente o crate reqwest? Quais alternativas existem? Estou interessado tanto na versão assíncrona (tokio + reqwest) quanto na bloqueante (simples).

Espero obter um exemplo funcional com tratamento de erros, para que o código não entre em pânico em caso de requisição mal-sucedida. De preferência com parsing de JSON usando serde_json. Desde já, agradeço pela ajuda.