1- #![ expect( clippy:: unwrap_used, reason = "contains legacy code which uses unwrap" ) ]
2-
31//! This module implements the API access to the Sentry API as well
42//! as some other APIs we interact with. In particular it can talk
53//! to the GitHub API to figure out if there are new releases of the
@@ -160,6 +158,7 @@ impl Api {
160158 pub fn with_config ( config : Arc < Config > ) -> Api {
161159 Api {
162160 config,
161+ #[ expect( clippy:: unwrap_used, reason = "legacy code" ) ]
163162 pool : r2d2:: Pool :: builder ( )
164163 . max_size ( 16 )
165164 . build ( CurlConnectionManager )
@@ -223,7 +222,11 @@ impl Api {
223222 url : & str ,
224223 auth : Option < & Auth > ,
225224 ) -> ApiResult < ApiRequest > {
226- let mut handle = self . pool . get ( ) . unwrap ( ) ;
225+ let mut handle = self
226+ . pool
227+ . get ( )
228+ . map_err ( |e| ApiError :: with_source ( ApiErrorKind :: RequestFailed , e) ) ?;
229+
227230 handle. reset ( ) ;
228231 if !self . config . allow_keepalive ( ) {
229232 handle. forbid_reuse ( true ) . ok ( ) ;
@@ -310,7 +313,11 @@ impl Api {
310313 }
311314 }
312315 }
313- std:: thread:: sleep ( Duration :: milliseconds ( 500 ) . to_std ( ) . unwrap ( ) ) ;
316+ std:: thread:: sleep (
317+ Duration :: milliseconds ( 500 )
318+ . to_std ( )
319+ . expect ( "500ms is valid, as it is non-negative" ) ,
320+ ) ;
314321 if Utc :: now ( ) - duration > started {
315322 return Ok ( false ) ;
316323 }
@@ -1608,6 +1615,7 @@ fn handle_req<W: Write>(
16081615 } ) ?;
16091616 } else if progress_bar_mode. active ( ) {
16101617 let pb_progress = pb. clone ( ) ;
1618+ #[ expect( clippy:: unwrap_used, reason = "legacy code" ) ]
16111619 handle. progress_function ( move |a, b, c, d| {
16121620 let ( down_len, down_pos, up_len, up_pos) = ( a as u64 , b as u64 , c as u64 , d as u64 ) ;
16131621 let mut pb = pb_progress. borrow_mut ( ) ;
@@ -1661,8 +1669,8 @@ fn handle_req<W: Write>(
16611669 handle. perform ( ) ?;
16621670 }
16631671
1664- if pb . borrow ( ) . is_some ( ) {
1665- pb. borrow ( ) . as_ref ( ) . unwrap ( ) . finish_and_clear ( ) ;
1672+ if let Some ( pb ) = pb . borrow ( ) . as_ref ( ) {
1673+ pb. finish_and_clear ( ) ;
16661674 }
16671675
16681676 Ok ( ( handle. response_code ( ) ?, headers) )
@@ -1812,6 +1820,7 @@ impl ApiRequest {
18121820 fn get_headers ( & self ) -> curl:: easy:: List {
18131821 let mut result = curl:: easy:: List :: new ( ) ;
18141822 for header_bytes in self . headers . iter ( ) {
1823+ #[ expect( clippy:: unwrap_used, reason = "legacy code" ) ]
18151824 let header = String :: from_utf8 ( header_bytes. to_vec ( ) ) . unwrap ( ) ;
18161825 result. append ( & header) . ok ( ) ;
18171826 }
@@ -1851,7 +1860,10 @@ impl ApiRequest {
18511860 }
18521861
18531862 // Exponential backoff
1854- let backoff_timeout = backoff. next_backoff ( ) . unwrap ( ) ;
1863+ let backoff_timeout = backoff
1864+ . next_backoff ( )
1865+ . expect ( "should not return None, as there is no max_elapsed_time" ) ;
1866+
18551867 debug ! (
18561868 "retry number {}, retrying again in {} ms" ,
18571869 retry_number,
@@ -2004,7 +2016,8 @@ impl ApiResponse {
20042016
20052017fn log_headers ( is_response : bool , data : & [ u8 ] ) {
20062018 lazy_static ! {
2007- static ref AUTH_RE : Regex = Regex :: new( r"(?i)(authorization):\s*([\w]+)\s+(.*)" ) . unwrap( ) ;
2019+ static ref AUTH_RE : Regex =
2020+ Regex :: new( r"(?i)(authorization):\s*([\w]+)\s+(.*)" ) . expect( "regex is valid" ) ;
20082021 }
20092022 if let Ok ( header) = std:: str:: from_utf8 ( data) {
20102023 for line in header. lines ( ) {
@@ -2014,6 +2027,7 @@ fn log_headers(is_response: bool, data: &[u8]) {
20142027
20152028 let replaced = AUTH_RE . replace_all ( line, |caps : & Captures < ' _ > | {
20162029 let info = if & caps[ 1 ] . to_lowercase ( ) == "basic" {
2030+ #[ expect( clippy:: unwrap_used, reason = "legacy code" ) ]
20172031 caps[ 3 ] . split ( ':' ) . next ( ) . unwrap ( ) . to_owned ( )
20182032 } else {
20192033 format ! ( "{}***" , & caps[ 3 ] [ ..std:: cmp:: min( caps[ 3 ] . len( ) , 8 ) ] )
0 commit comments