diff --git a/src/gcp/client.rs b/src/gcp/client.rs index 00d3168f..4a246d21 100644 --- a/src/gcp/client.rs +++ b/src/gcp/client.rs @@ -32,8 +32,8 @@ use crate::multipart::PartId; use crate::path::Path; use crate::util::hex_encode; use crate::{ - Attribute, Attributes, ClientOptions, GetOptions, MultipartId, PutMode, PutMultipartOptions, - PutOptions, PutPayload, PutResult, Result, RetryConfig, + Attribute, Attributes, ClientOptions, CopyMode, GetOptions, MultipartId, PutMode, + PutMultipartOptions, PutOptions, PutPayload, PutResult, Result, RetryConfig, }; use async_trait::async_trait; use base64::Engine; @@ -566,12 +566,7 @@ impl GoogleCloudStorageClient { } /// Perform a copy request - pub(crate) async fn copy_request( - &self, - from: &Path, - to: &Path, - if_not_exists: bool, - ) -> Result<()> { + pub(crate) async fn copy_request(&self, from: &Path, to: &Path, mode: CopyMode) -> Result<()> { let credential = self.get_credential().await?; let url = self.object_url(to); @@ -583,6 +578,11 @@ impl GoogleCloudStorageClient { .request(Method::PUT, url) .header("x-goog-copy-source", source); + let if_not_exists = match mode { + CopyMode::Create => true, + CopyMode::Overwrite => false, + }; + if if_not_exists { builder = builder.header(&VERSION_MATCH, 0); } diff --git a/src/gcp/mod.rs b/src/gcp/mod.rs index 8d7b26c7..51e85ae6 100644 --- a/src/gcp/mod.rs +++ b/src/gcp/mod.rs @@ -37,10 +37,10 @@ use std::sync::Arc; use std::time::Duration; +use crate::CopyOptions; use crate::client::CredentialProvider; use crate::gcp::credential::GCSAuthorizer; use crate::signer::Signer; -use crate::{CopyMode, CopyOptions}; use crate::{ GetOptions, GetResult, ListResult, MultipartId, MultipartUpload, ObjectMeta, ObjectStore, PutMultipartOptions, PutOptions, PutPayload, PutResult, Result, UploadPart, multipart::PartId, @@ -221,10 +221,7 @@ impl ObjectStore for GoogleCloudStorage { extensions: _, } = options; - match mode { - CopyMode::Overwrite => self.client.copy_request(from, to, true).await, - CopyMode::Create => self.client.copy_request(from, to, false).await, - } + self.client.copy_request(from, to, mode).await } }