use async_trait::async_trait;
use bytes::Bytes;
use hey_sdk::http::{Body, HttpClient, Request, Response, StatusCode, header};
use hey_sdk::{Client, Config, Error, StaticTokenProvider};
struct Canned;
#[async_trait]
impl HttpClient for Canned {
async fn send(&self, request: Request<Bytes>) -> Result<Response<Body>, Error> {
eprintln!("{} {}", request.method(), request.uri());
let body = r#"[{"id": 1, "kind": "imbox", "name": "Imbox"},
{"id": 2, "kind": "feed", "name": "The Feed"}]"#;
Response::builder()
.status(StatusCode::OK)
.header(header::CONTENT_TYPE, "application/json")
.header("X-Request-Id", "canned")
.body(Body::from(Bytes::from_static(body.as_bytes())))
.map_err(Error::network)
}
}
#[tokio::main]
async fn main() -> Result<(), Error> {
let client = Client::builder(Config::default())
.token_provider(StaticTokenProvider::new("not-a-real-token"))
.http_client(Canned)
.build()?;
for mailbox in client.boxes().list().await?.iter() {
println!("{:>4} {:<8} {}", mailbox.id, mailbox.kind, mailbox.name);
}
Ok(())
}