changeset 130:3db9fcf07b0a

drive_example: Update to new Download API
author Lewin Bormann <lbo@spheniscida.de>
date Mon, 26 Oct 2020 10:44:34 +0100
parents 0c1e788bda0c
children 44f33160f884
files drive_example/src/drive_v3_types.rs drive_example/src/main.rs
diffstat 2 files changed, 79 insertions(+), 86 deletions(-) [+]
line wrap: on
line diff
--- a/drive_example/src/drive_v3_types.rs	Mon Oct 26 10:44:20 2020 +0100
+++ b/drive_example/src/drive_v3_types.rs	Mon Oct 26 10:44:34 2020 +0100
@@ -3901,7 +3901,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -3971,7 +3971,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4003,7 +4003,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4035,7 +4035,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4103,7 +4103,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4178,7 +4178,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4215,7 +4215,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4251,7 +4251,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4286,7 +4286,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4326,7 +4326,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4394,7 +4394,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4430,7 +4430,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4465,7 +4465,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4500,7 +4500,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4532,7 +4532,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4567,7 +4567,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4602,7 +4602,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4673,7 +4673,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4706,7 +4706,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -4747,7 +4747,7 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
 
         do_upload_multipart(
@@ -4791,7 +4791,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         let (_resp, headers): (EmptyResponse, hyper::HeaderMap) = do_request_with_headers(
             &self.client,
@@ -4841,7 +4841,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4873,7 +4873,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4893,11 +4893,10 @@
     /// or a non-JSON type, the returned value indicates if a download took place or data was written to
     /// `dst`. If `dst` is `None` despite data being available for download, `ApiError::DataAvailableError`
     /// is returned.
-    pub async fn export(
-        &mut self,
+    pub async fn export<'a>(
+        &'a mut self,
         params: &FilesExportParams,
-        dst: Option<&mut (dyn tokio::io::AsyncWrite + std::marker::Unpin)>,
-    ) -> Result<DownloadResponse<()>> {
+    ) -> Result<Download<'a, EmptyRequest, ()>> {
         let rel_path = format!(
             "files/{fileId}/export",
             fileId = percent_encode(params.file_id.as_bytes(), NON_ALPHANUMERIC)
@@ -4917,18 +4916,17 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
 
         do_download(
             &self.client,
             &full_uri,
-            &[(
+            vec![(
                 hyper::header::AUTHORIZATION,
                 format!("Bearer {token}", token = tok.as_str()),
             )],
-            "GET",
+            "GET".into(),
             opt_request,
-            dst,
         )
         .await
     }
@@ -4951,7 +4949,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -4971,11 +4969,10 @@
     /// or a non-JSON type, the returned value indicates if a download took place or data was written to
     /// `dst`. If `dst` is `None` despite data being available for download, `ApiError::DataAvailableError`
     /// is returned.
-    pub async fn get(
-        &mut self,
+    pub async fn get<'a>(
+        &'a mut self,
         params: &FilesGetParams,
-        dst: Option<&mut (dyn tokio::io::AsyncWrite + std::marker::Unpin)>,
-    ) -> Result<DownloadResponse<File>> {
+    ) -> Result<Download<'a, EmptyRequest, File>> {
         let rel_path = format!(
             "files/{fileId}",
             fileId = percent_encode(params.file_id.as_bytes(), NON_ALPHANUMERIC)
@@ -4995,18 +4992,17 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
 
         do_download(
             &self.client,
             &full_uri,
-            &[(
+            vec![(
                 hyper::header::AUTHORIZATION,
                 format!("Bearer {token}", token = tok.as_str()),
             )],
-            "GET",
+            "GET".into(),
             opt_request,
-            dst,
         )
         .await
     }
@@ -5029,7 +5025,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5064,7 +5060,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5108,7 +5104,7 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
 
         do_upload_multipart(
@@ -5155,7 +5151,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         let (_resp, headers): (EmptyResponse, hyper::HeaderMap) = do_request_with_headers(
             &self.client,
@@ -5190,12 +5186,11 @@
     /// or a non-JSON type, the returned value indicates if a download took place or data was written to
     /// `dst`. If `dst` is `None` despite data being available for download, `ApiError::DataAvailableError`
     /// is returned.
-    pub async fn watch(
-        &mut self,
+    pub async fn watch<'a>(
+        &'a mut self,
         params: &FilesWatchParams,
-        req: &Channel,
-        dst: Option<&mut (dyn tokio::io::AsyncWrite + std::marker::Unpin)>,
-    ) -> Result<DownloadResponse<Channel>> {
+        req: &'a Channel,
+    ) -> Result<Download<'a, Channel, Channel>> {
         let rel_path = format!(
             "files/{fileId}/watch",
             fileId = percent_encode(params.file_id.as_bytes(), NON_ALPHANUMERIC)
@@ -5215,19 +5210,18 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
 
         do_download(
             &self.client,
             &full_uri,
-            &[(
+            vec![(
                 hyper::header::AUTHORIZATION,
                 format!("Bearer {token}", token = tok.as_str()),
             )],
-            "POST",
+            "POST".into(),
             opt_request,
-            dst,
         )
         .await
     }
@@ -5292,7 +5286,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5329,7 +5323,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5365,7 +5359,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5400,7 +5394,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5440,7 +5434,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5512,7 +5506,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5550,7 +5544,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5587,7 +5581,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5623,7 +5617,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5660,7 +5654,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5732,7 +5726,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5752,11 +5746,10 @@
     /// or a non-JSON type, the returned value indicates if a download took place or data was written to
     /// `dst`. If `dst` is `None` despite data being available for download, `ApiError::DataAvailableError`
     /// is returned.
-    pub async fn get(
-        &mut self,
+    pub async fn get<'a>(
+        &'a mut self,
         params: &RevisionsGetParams,
-        dst: Option<&mut (dyn tokio::io::AsyncWrite + std::marker::Unpin)>,
-    ) -> Result<DownloadResponse<Revision>> {
+    ) -> Result<Download<'a, EmptyRequest, Revision>> {
         let rel_path = format!(
             "files/{fileId}/revisions/{revisionId}",
             fileId = percent_encode(params.file_id.as_bytes(), NON_ALPHANUMERIC),
@@ -5777,18 +5770,17 @@
         }
 
         let full_uri = path + &url_params;
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
 
         do_download(
             &self.client,
             &full_uri,
-            &[(
+            vec![(
                 hyper::header::AUTHORIZATION,
                 format!("Bearer {token}", token = tok.as_str()),
             )],
-            "GET",
+            "GET".into(),
             opt_request,
-            dst,
         )
         .await
     }
@@ -5814,7 +5806,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5854,7 +5846,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5926,7 +5918,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
@@ -5962,7 +5954,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -5997,7 +5989,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -6029,7 +6021,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         do_request(
             &self.client,
             &full_uri,
@@ -6068,7 +6060,7 @@
 
         let full_uri = path + &url_params;
 
-        let opt_request: Option<EmptyRequest> = None;
+        let opt_request: Option<&EmptyRequest> = None;
         let opt_request = Some(req);
         do_request(
             &self.client,
--- a/drive_example/src/main.rs	Mon Oct 26 10:44:20 2020 +0100
+++ b/drive_example/src/main.rs	Mon Oct 26 10:44:34 2020 +0100
@@ -59,37 +59,38 @@
     let mut params = drive::FilesGetParams::default();
     params.file_id = file_id.clone();
     params.drive_params = Some(general_params.clone());
+    // This parameter will trigger the download.
     params.drive_params.as_mut().unwrap().alt = Some("media".into());
     let mut dest = vec![0 as u8; 128];
 
     // Get file contents.
-    let get_file = cl.get(&params, Some(&mut dest)).await?;
+    let get_file = cl.get(&params).await?.do_it_to_buf(&mut dest).await?;
     println!("{:?}", get_file);
 
     // get() returns a response type (Response(...)) if the server returned an application/json
     // response, otherwise it will download to a Writer. If you don't supply a Writer and there is
     // data to download, an error is returned (ApiError::DataAvailableError).
     match get_file {
-        common::DownloadResponse::Response(_) => {
+        common::DownloadResult::Response(_) => {
             // We want download! No metadata.
             assert!(false);
         }
-        common::DownloadResponse::Downloaded => println!("Download success."),
+        common::DownloadResult::Downloaded => println!("Download success."),
     }
 
-    // Get file metadata.
+    // Get file metadata. We don't specify &alt=media, so no download will take place.
     let mut params = drive::FilesGetParams::default();
     params.file_id = file_id.clone();
-    let get_file = cl.get(&params, None).await?;
+    let get_file = cl.get(&params).await?.do_it(None).await?;
     println!("{:?}", get_file);
 
     match get_file {
-        common::DownloadResponse::Response(gf) => {
+        common::DownloadResult::Response(gf) => {
             println!("Metadata success.");
             assert!(gf.name == Some(fname.to_string()));
         }
         // We want metadata! No download.
-        common::DownloadResponse::Downloaded => assert!(false),
+        common::DownloadResult::Downloaded => assert!(false),
     }
     Ok(())
 }