diff --git a/Cargo.toml b/Cargo.toml index 8c5dbce..5d220ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ url = "1" tap-reader = "1" try_from = "0.2.2" toml = { version = "0.4.6", optional = true } +hyper-old-types = "0.11.0" [dependencies.chrono] version = "0.4" diff --git a/src/http_send.rs b/src/http_send.rs index b81bb14..9c161f8 100644 --- a/src/http_send.rs +++ b/src/http_send.rs @@ -9,7 +9,7 @@ pub trait HttpSend: Clone + Debug { /// Convenience method so that .build() doesn't have to be called at every /// call site - fn send(&self, client: &Client, builder: &mut RequestBuilder) -> Result { + fn send(&self, client: &Client, builder: RequestBuilder) -> Result { let request = builder.build()?; self.execute(client, request) } diff --git a/src/lib.rs b/src/lib.rs index 695246c..aad83e9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,6 +46,7 @@ extern crate serde_derive; #[macro_use] extern crate doc_comment; +extern crate hyper_old_types; extern crate isolang; #[macro_use] extern crate serde_json; @@ -72,12 +73,7 @@ extern crate indoc; use std::{borrow::Cow, ops}; -use reqwest::{ - header::{Authorization, Bearer, Headers}, - Client, - RequestBuilder, - Response, -}; +use reqwest::{Client, RequestBuilder, Response}; use tap_reader::Tap; use entities::prelude::*; @@ -139,7 +135,6 @@ pub mod prelude { pub struct Mastodon { client: Client, http_sender: H, - headers: Headers, /// Raw data about your mastodon instance. pub data: Data, } @@ -151,10 +146,10 @@ impl Mastodon { format!("{}{}", self.base, url) } - pub(crate) fn send(&self, req: &mut RequestBuilder) -> Result { + pub(crate) fn send(&self, req: RequestBuilder) -> Result { Ok(self .http_sender - .send(&self.client, req.headers(self.headers.clone()))?) + .send(&self.client, req.bearer_auth(&self.token))?) } } @@ -361,7 +356,7 @@ impl MastodonClient for Mastodon { url = format!("{}{}", url, request.to_querystring()); } - let response = self.send(&mut self.client.get(&url))?; + let response = self.send(self.client.get(&url))?; Page::new(self, response) } @@ -383,7 +378,7 @@ impl MastodonClient for Mastodon { url.pop(); } - let response = self.send(&mut self.client.get(&url))?; + let response = self.send(self.client.get(&url))?; Page::new(self, response) } @@ -449,15 +444,9 @@ impl MastodonBuilder { pub fn build(self) -> Result> { Ok(if let Some(data) = self.data { - let mut headers = Headers::new(); - headers.set(Authorization(Bearer { - token: (*data.token).to_owned(), - })); - Mastodon { client: self.client.unwrap_or_else(|| Client::new()), http_sender: self.http_sender, - headers, data, } } else { diff --git a/src/macros.rs b/src/macros.rs index 1e743ee..967cb16 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -5,7 +5,7 @@ macro_rules! methods { -> Result { let response = self.send( - &mut self.client.$method(&url) + self.client.$method(&url) )?; deserialise(response) @@ -43,7 +43,7 @@ macro_rules! paged_routes { fn $name(&self) -> Result> { let url = self.route(concat!("/api/v1/", $url)); let response = self.send( - &mut self.client.$method(&url) + self.client.$method(&url) )?; Page::new(self, response) @@ -88,7 +88,7 @@ macro_rules! paged_routes { let url = format!(concat!("/api/v1/", $url, "?{}"), &qs); let response = self.send( - &mut self.client.get(&url) + self.client.get(&url) )?; Page::new(self, response) @@ -350,7 +350,7 @@ macro_rules! paged_routes_with_id { fn $name(&self, id: &str) -> Result> { let url = self.route(&format!(concat!("/api/v1/", $url), id)); let response = self.send( - &mut self.client.$method(&url) + self.client.$method(&url) )?; Page::new(self, response) diff --git a/src/page.rs b/src/page.rs index 32ba048..cab4e09 100644 --- a/src/page.rs +++ b/src/page.rs @@ -1,9 +1,7 @@ use super::{deserialise, Mastodon, Result}; use entities::itemsiter::ItemsIter; -use reqwest::{ - header::{Link, RelationType}, - Response, -}; +use hyper_old_types::header::{parsing, Link, RelationType}; +use reqwest::{header::LINK, Response}; use serde::Deserialize; use url::Url; @@ -32,7 +30,7 @@ macro_rules! pages { }; let response = self.mastodon.send( - &mut self.mastodon.client.get(url) + self.mastodon.client.get(url) )?; let (prev, next) = get_links(&response)?; @@ -108,7 +106,10 @@ fn get_links(response: &Response) -> Result<(Option, Option)> { let mut prev = None; let mut next = None; - if let Some(link_header) = response.headers().get::() { + if let Some(link_header) = response.headers().get(LINK) { + let link_header = link_header.to_str().unwrap(); + let link_header = link_header.as_bytes(); + let link_header: Link = parsing::from_raw_str(&link_header).unwrap(); for value in link_header.values() { if let Some(relations) = value.rel() { if relations.contains(&RelationType::Next) { diff --git a/src/registration.rs b/src/registration.rs index 00a9125..817b820 100644 --- a/src/registration.rs +++ b/src/registration.rs @@ -99,7 +99,7 @@ impl<'a, H: HttpSend> Registration<'a, H> { self } - fn send(&self, req: &mut RequestBuilder) -> Result { + fn send(&self, req: RequestBuilder) -> Result { Ok(self.http_sender.send(&self.client, req)?) } @@ -184,7 +184,7 @@ impl<'a, H: HttpSend> Registration<'a, H> { } impl Registered { - fn send(&self, req: &mut RequestBuilder) -> Result { + fn send(&self, req: RequestBuilder) -> Result { Ok(self.http_sender.send(&self.client, req)?) } @@ -213,7 +213,7 @@ impl Registered { self.redirect ); - let token: AccessToken = self.send(&mut self.client.post(&url))?.json()?; + let token: AccessToken = self.send(self.client.post(&url))?.json()?; let data = Data { base: self.base.into(),