google_cloud_storage/storage/
request_options.rs1use super::common_options::CommonOptions;
16use crate::{
17 read_resume_policy::ReadResumePolicy,
18 storage::checksum::details::{Checksum, Crc32c},
19};
20use gax::{
21 backoff_policy::BackoffPolicy,
22 retry_policy::RetryPolicy,
23 retry_throttler::{AdaptiveThrottler, SharedRetryThrottler},
24};
25use gaxi::options::ClientConfig;
26use std::sync::{Arc, Mutex};
27
28#[derive(Clone, Debug)]
33pub struct RequestOptions {
34 pub(crate) retry_policy: Arc<dyn RetryPolicy>,
35 pub(crate) backoff_policy: Arc<dyn BackoffPolicy>,
36 pub(crate) retry_throttler: SharedRetryThrottler,
37 pub(crate) idempotency: Option<bool>,
38 pub(crate) checksum: Checksum,
39 pub(crate) automatic_decompression: bool,
40 pub(crate) common_options: CommonOptions,
41}
42
43impl RequestOptions {
44 pub(crate) fn new() -> Self {
45 let retry_policy = Arc::new(crate::retry_policy::storage_default());
46 let backoff_policy = Arc::new(crate::backoff_policy::default());
47 let retry_throttler = Arc::new(Mutex::new(AdaptiveThrottler::default()));
48 Self::new_with_policies(
49 retry_policy,
50 backoff_policy,
51 retry_throttler,
52 CommonOptions::new(),
53 )
54 }
55
56 pub(crate) fn new_with_client_config(
57 config: &ClientConfig,
58 common_options: CommonOptions,
59 ) -> Self {
60 let retry_policy = config
61 .retry_policy
62 .clone()
63 .unwrap_or_else(|| Arc::new(crate::retry_policy::storage_default()));
64 let backoff_policy = config
65 .backoff_policy
66 .clone()
67 .unwrap_or_else(|| Arc::new(crate::backoff_policy::default()));
68 let retry_throttler = config.retry_throttler.clone();
69 Self::new_with_policies(
70 retry_policy,
71 backoff_policy,
72 retry_throttler,
73 common_options,
74 )
75 }
76
77 pub fn set_read_resume_policy(&mut self, v: Arc<dyn ReadResumePolicy>) {
78 self.common_options.read_resume_policy = v;
79 }
80
81 pub fn read_resume_policy(&self) -> Arc<dyn ReadResumePolicy> {
82 self.common_options.read_resume_policy.clone()
83 }
84
85 pub fn set_resumable_upload_threshold(&mut self, v: usize) {
86 self.common_options.resumable_upload_threshold = v;
87 }
88
89 pub fn resumable_upload_threshold(&self) -> usize {
90 self.common_options.resumable_upload_threshold
91 }
92
93 pub fn set_resumable_upload_buffer_size(&mut self, v: usize) {
94 self.common_options.resumable_upload_buffer_size = v;
95 }
96
97 pub fn resumable_upload_buffer_size(&self) -> usize {
98 self.common_options.resumable_upload_buffer_size
99 }
100
101 fn new_with_policies(
102 retry_policy: Arc<dyn RetryPolicy>,
103 backoff_policy: Arc<dyn BackoffPolicy>,
104 retry_throttler: SharedRetryThrottler,
105 common_options: CommonOptions,
106 ) -> Self {
107 Self {
108 retry_policy,
109 backoff_policy,
110 retry_throttler,
111 common_options,
112 idempotency: None,
113 checksum: Checksum {
114 crc32c: Some(Crc32c::default()),
115 md5_hash: None,
116 },
117 automatic_decompression: false,
118 }
119 }
120}