qiniu_upload_manager/
object_params.rs1use super::mime::Mime;
2use assert_impl::assert_impl;
3use qiniu_apis::{
4 http::Extensions,
5 http_client::{FileName, RegionsProvider},
6};
7use qiniu_utils::ObjectName;
8use std::{collections::HashMap, mem::take, sync::Arc};
9
10#[derive(Debug, Default, Clone)]
12pub struct ObjectParams(Arc<ObjectParamsInner>);
13
14#[derive(Debug, Default)]
15struct ObjectParamsInner {
16 region_provider: Option<Box<dyn RegionsProvider>>,
17 object_name: Option<ObjectName>,
18 file_name: Option<FileName>,
19 content_type: Option<Mime>,
20 metadata: HashMap<String, String>,
21 custom_vars: HashMap<String, String>,
22 extensions: Extensions,
23}
24
25impl ObjectParams {
26 #[inline]
28 pub fn builder() -> ObjectParamsBuilder {
29 Default::default()
30 }
31
32 #[inline]
34 pub fn region_provider(&self) -> Option<&dyn RegionsProvider> {
35 self.0.region_provider.as_deref()
36 }
37
38 #[inline]
40 pub fn object_name(&self) -> Option<&str> {
41 self.0.object_name.as_deref()
42 }
43
44 #[inline]
46 pub fn file_name(&self) -> Option<&str> {
47 self.0.file_name.as_deref()
48 }
49
50 #[inline]
52 pub fn content_type(&self) -> Option<&Mime> {
53 self.0.content_type.as_ref()
54 }
55
56 #[inline]
58 pub fn metadata(&self) -> &HashMap<String, String> {
59 &self.0.metadata
60 }
61
62 #[inline]
64 pub fn custom_vars(&self) -> &HashMap<String, String> {
65 &self.0.custom_vars
66 }
67
68 #[inline]
70 pub fn extensions(&self) -> &Extensions {
71 &self.0.extensions
72 }
73
74 #[allow(dead_code)]
75 fn assert() {
76 assert_impl!(Send: Self);
77 assert_impl!(Sync: Self);
78 }
79}
80
81#[derive(Debug)]
83pub struct ObjectParamsBuilder(ObjectParamsInner);
84
85impl Default for ObjectParamsBuilder {
86 fn default() -> Self {
87 Self(ObjectParamsInner {
88 region_provider: Default::default(),
89 object_name: Default::default(),
90 file_name: Default::default(),
91 content_type: Default::default(),
92 metadata: Default::default(),
93 custom_vars: Default::default(),
94 extensions: Default::default(),
95 })
96 }
97}
98
99impl ObjectParamsBuilder {
100 #[inline]
102 pub fn region_provider(&mut self, region_provider: impl RegionsProvider + 'static) -> &mut Self {
103 self.0.region_provider = Some(Box::new(region_provider));
104 self
105 }
106
107 #[inline]
109 pub fn object_name(&mut self, object_name: impl Into<ObjectName>) -> &mut Self {
110 self.0.object_name = Some(object_name.into());
111 self
112 }
113
114 #[inline]
116 pub fn file_name(&mut self, file_name: impl Into<FileName>) -> &mut Self {
117 self.0.file_name = Some(file_name.into());
118 self
119 }
120
121 #[inline]
123 pub fn content_type(&mut self, content_type: Mime) -> &mut Self {
124 self.0.content_type = Some(content_type);
125 self
126 }
127
128 #[inline]
130 pub fn metadata(&mut self, metadata: HashMap<String, String>) -> &mut Self {
131 self.0.metadata = metadata;
132 self
133 }
134
135 #[inline]
137 pub fn insert_metadata<K: Into<String>, V: Into<String>>(&mut self, key: K, value: V) -> &mut Self {
138 self.0.metadata.insert(key.into(), value.into());
139 self
140 }
141
142 #[inline]
144 pub fn custom_vars(&mut self, custom_vars: HashMap<String, String>) -> &mut Self {
145 self.0.custom_vars = custom_vars;
146 self
147 }
148
149 #[inline]
151 pub fn insert_custom_var<K: Into<String>, V: Into<String>>(&mut self, key: K, value: V) -> &mut Self {
152 self.0.custom_vars.insert(key.into(), value.into());
153 self
154 }
155
156 #[inline]
158 pub fn extensions(&mut self, extensions: Extensions) -> &mut Self {
159 self.0.extensions = extensions;
160 self
161 }
162
163 #[inline]
165 pub fn insert_extension<T: Send + Sync + 'static>(&mut self, val: T) -> &mut Self {
166 self.0.extensions.insert(val);
167 self
168 }
169
170 #[inline]
172 pub fn build(&mut self) -> ObjectParams {
173 ObjectParams(Arc::new(take(&mut self.0)))
174 }
175
176 #[allow(dead_code)]
177 fn assert() {
178 assert_impl!(Send: Self);
179 assert_impl!(Sync: Self);
180 }
181}