From: Simon Tatham Date: Thu, 4 Jan 2024 09:08:46 +0000 (+0000) Subject: Fold the send() into Client::api_request. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=56004f93c71c4c0dfaedafc7e29be9eab5b1165e;p=mastodonochrome.git Fold the send() into Client::api_request. One fewer line of faff at every call site. Plus, now I can centralise logging usefully. --- diff --git a/src/client.rs b/src/client.rs index 6128671..2a1b1d4 100644 --- a/src/client.rs +++ b/src/client.rs @@ -293,9 +293,11 @@ impl Client { } fn api_request(&self, req: Req) -> - Result<(String, reqwest::blocking::RequestBuilder), ClientError> + Result<(String, reqwest::blocking::Response), ClientError> { - self.api_request_cl(&self.client, req) + let (url, req) = self.api_request_cl(&self.client, req)?; + let rsp = req.send()?; + Ok((url, rsp)) } pub fn instance(&mut self) -> Result { @@ -303,8 +305,7 @@ impl Client { return Ok(inst.clone()); } - let (url, req) = self.api_request(Req::get("v2/instance"))?; - let rsp = req.send()?; + let (url, rsp) = self.api_request(Req::get("v2/instance"))?; let rspstatus = rsp.status(); let inst: Instance = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -344,9 +345,8 @@ impl Client { return Ok(st.clone()); } - let (url, req) = self.api_request(Req::get( + let (url, rsp) = self.api_request(Req::get( &("v1/accounts/".to_owned() + id)))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let ac: Account = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -369,9 +369,8 @@ impl Client { pub fn account_relationship_by_id(&mut self, id: &str) -> Result { - let (url, req) = self.api_request( + let (url, rsp) = self.api_request( Req::get("v1/accounts/relationships").param("id", id))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let rels: Vec = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -403,9 +402,8 @@ impl Client { return Ok(st); } - let (url, req) = self.api_request(Req::get( + let (url, rsp) = self.api_request(Req::get( &("v1/statuses/".to_owned() + id)))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let st: Status = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -448,9 +446,8 @@ impl Client { return Ok(not); } - let (url, req) = self.api_request(Req::get( + let (url, rsp) = self.api_request(Req::get( &("v1/notifications/".to_owned() + id)))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let not: Notification = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -555,8 +552,7 @@ impl Client { } else { req }, }; - let (url, req) = self.api_request(req)?; - let rsp = req.send()?; + let (url, rsp) = self.api_request(req)?; let rspstatus = rsp.status(); if !rspstatus.is_success() { return Err(ClientError::UrlError( @@ -828,9 +824,8 @@ impl Client { pub fn account_by_name(&mut self, name: &str) -> Result { - let (url, req) = self.api_request( + let (url, rsp) = self.api_request( Req::get("v1/accounts/lookup").param("acct", name))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let ac: Account = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -863,8 +858,7 @@ impl Client { .param("in_reply_to_id", id), }; - let (url, req) = self.api_request(req)?; - let rsp = req.send()?; + let (url, rsp) = self.api_request(req)?; let rspstatus = rsp.status(); if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string())) @@ -876,9 +870,8 @@ impl Client { pub fn fave_boost_post(&mut self, id: &str, verb: &str) -> Result<(), ClientError> { - let (url, req) = self.api_request(Req::post( + let (url, rsp) = self.api_request(Req::post( &format!("v1/statuses/{id}/{verb}")))?; - let rsp = req.send()?; let rspstatus = rsp.status(); // Cache the returned status so as to update its faved/boosted flags let st: Status = if !rspstatus.is_success() { @@ -911,9 +904,8 @@ impl Client { pub fn status_context(&mut self, id: &str) -> Result { - let (url, req) = self.api_request(Req::get( + let (url, rsp) = self.api_request(Req::get( &format!("v1/statuses/{id}/context")))?; - let rsp = req.send()?; let rspstatus = rsp.status(); let ctx: Context = if !rspstatus.is_success() { Err(ClientError::UrlError(url.clone(), rspstatus.to_string()))