diff --git a/google-apis-common/src/lib.rs b/google-apis-common/src/lib.rs index 21d73d8fdf..0b1900f07f 100644 --- a/google-apis-common/src/lib.rs +++ b/google-apis-common/src/lib.rs @@ -5,7 +5,6 @@ use std::future::Future; use std::io::{self, Cursor, Read, Seek, SeekFrom, Write}; use std::pin::Pin; use std::str::FromStr; -use std::thread::sleep; use std::time::Duration; use itertools::Itertools; @@ -21,6 +20,7 @@ use mime::{Attr, Mime, SubLevel, TopLevel, Value}; use serde_json as json; use tokio::io::{AsyncRead, AsyncWrite}; +use tokio::time::sleep; use tower_service; pub use yup_oauth2 as oauth2; @@ -597,7 +597,6 @@ where pub media_type: Mime, pub content_length: u64, } - impl<'a, A, S> ResumableUploadHelper<'a, A, S> where S: tower_service::Service + Clone + Send + Sync + 'static, @@ -639,7 +638,7 @@ where } None | Some(_) => { if let Retry::After(d) = self.delegate.http_failure(&r, None) { - sleep(d); + sleep(d).await; continue; } return Err(Ok(r)); @@ -649,7 +648,7 @@ where } Err(err) => { if let Retry::After(d) = self.delegate.http_error(&err) { - sleep(d); + sleep(d).await; continue; } return Err(Err(err)); @@ -732,7 +731,7 @@ where &reconstructed_result, json::from_str(&res_body_string).ok(), ) { - sleep(d); + sleep(d).await; continue; } } @@ -740,7 +739,7 @@ where } Err(err) => { if let Retry::After(d) = self.delegate.http_error(&err) { - sleep(d); + sleep(d).await; continue; } return Some(Err(err)); @@ -752,32 +751,14 @@ where // TODO(ST): Allow sharing common code between program types pub fn remove_json_null_values(value: &mut json::value::Value) { - match *value { - json::value::Value::Object(ref mut map) => { - let mut for_removal = Vec::new(); - - for (key, mut value) in map.iter_mut() { - if value.is_null() { - for_removal.push(key.clone()); - } else { - remove_json_null_values(&mut value); - } - } - - for key in &for_removal { - map.remove(key); - } + match value { + json::value::Value::Object(map) => { + map.retain(|_, value| !value.is_null()); + map.values_mut().for_each(remove_json_null_values); } - json::value::Value::Array(ref mut arr) => { - let mut i = 0; - while i < arr.len() { - if arr[i].is_null() { - arr.remove(i); - } else { - remove_json_null_values(&mut arr[i]); - i += 1; - } - } + json::value::Value::Array(arr) => { + arr.retain(|value| !value.is_null()); + arr.iter_mut().for_each(remove_json_null_values); } _ => {} } diff --git a/src/generator/templates/api/api.rs.mako b/src/generator/templates/api/api.rs.mako index 5eb985d96e..7bc840be33 100644 --- a/src/generator/templates/api/api.rs.mako +++ b/src/generator/templates/api/api.rs.mako @@ -24,10 +24,10 @@ use serde_json as json; use std::io; use std::fs; use std::mem; -use std::thread::sleep; use hyper::client::connect; use tokio::io::{AsyncRead, AsyncWrite}; +use tokio::time::sleep; use tower_service; use serde::{Serialize, Deserialize}; diff --git a/src/generator/templates/api/lib/mbuild.mako b/src/generator/templates/api/lib/mbuild.mako index 3c83c4e04c..1c970b828e 100644 --- a/src/generator/templates/api/lib/mbuild.mako +++ b/src/generator/templates/api/lib/mbuild.mako @@ -819,7 +819,7 @@ else { match req_result { Err(err) => { if let client::Retry::After(d) = dlg.http_error(&err) { - sleep(d); + sleep(d).await; continue; } ${delegate_finish}(false); @@ -835,7 +835,7 @@ else { let server_response = json::from_str::(&res_body_string).ok(); if let client::Retry::After(d) = dlg.http_failure(&restored_response, server_response.clone()) { - sleep(d); + sleep(d).await; continue; }