@@ -164,13 +164,14 @@ impl Order {
164164
165165 /// Poll the order with the given [`RetryPolicy`]
166166 ///
167- /// Yields the [`OrderStatus`] immediately if `Ready` or `Invalid`, or after `tries` attempts.
167+ /// Yields the [`OrderStatus`] immediately if `Ready` or `Invalid`, or yields an
168+ /// [`Error::Timeout`] if the [`RetryPolicy::timeout`] has been reached.
168169 pub async fn poll ( & mut self , retries : & RetryPolicy ) -> Result < OrderStatus , Error > {
169170 let mut retrying = retries. state ( ) ;
170171 self . retry_after = None ;
171172 loop {
172- if let ControlFlow :: Break ( ( ) ) = retrying. wait ( self . retry_after . take ( ) ) . await {
173- return Ok ( self . state . status ) ;
173+ if let ControlFlow :: Break ( err ) = retrying. wait ( self . retry_after . take ( ) ) . await {
174+ return Err ( err ) ;
174175 }
175176
176177 let state = self . refresh ( ) . await ?;
@@ -564,13 +565,13 @@ struct RetryState {
564565}
565566
566567impl RetryState {
567- async fn wait ( & mut self , after : Option < SystemTime > ) -> ControlFlow < ( ) , ( ) > {
568+ async fn wait ( & mut self , after : Option < SystemTime > ) -> ControlFlow < Error , ( ) > {
568569 if let Some ( after) = after {
569570 let now = SystemTime :: now ( ) ;
570571 if let Ok ( delay) = after. duration_since ( now) {
571572 let next = Instant :: now ( ) + delay;
572573 if next > self . deadline {
573- return ControlFlow :: Break ( ( ) ) ;
574+ return ControlFlow :: Break ( Error :: Timeout ( Some ( next ) ) ) ;
574575 } else {
575576 sleep ( delay) . await ;
576577 return ControlFlow :: Continue ( ( ) ) ;
@@ -581,7 +582,7 @@ impl RetryState {
581582 sleep ( self . delay ) . await ;
582583 self . delay = self . delay . mul_f32 ( self . backoff ) ;
583584 match Instant :: now ( ) + self . delay > self . deadline {
584- true => ControlFlow :: Break ( ( ) ) ,
585+ true => ControlFlow :: Break ( Error :: Timeout ( None ) ) ,
585586 false => ControlFlow :: Continue ( ( ) ) ,
586587 }
587588 }
0 commit comments