qiniu_upload_manager/
object_params.rs

1use 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/// 对象上传参数
11#[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    /// 创建对象上传参数构建器
27    #[inline]
28    pub fn builder() -> ObjectParamsBuilder {
29        Default::default()
30    }
31
32    /// 获取区域信息提供者
33    #[inline]
34    pub fn region_provider(&self) -> Option<&dyn RegionsProvider> {
35        self.0.region_provider.as_deref()
36    }
37
38    /// 获取对象名称
39    #[inline]
40    pub fn object_name(&self) -> Option<&str> {
41        self.0.object_name.as_deref()
42    }
43
44    /// 获取文件名称
45    #[inline]
46    pub fn file_name(&self) -> Option<&str> {
47        self.0.file_name.as_deref()
48    }
49
50    /// 获取 MIME 类型
51    #[inline]
52    pub fn content_type(&self) -> Option<&Mime> {
53        self.0.content_type.as_ref()
54    }
55
56    /// 获取对象元信息
57    #[inline]
58    pub fn metadata(&self) -> &HashMap<String, String> {
59        &self.0.metadata
60    }
61
62    /// 获取对象自定义变量
63    #[inline]
64    pub fn custom_vars(&self) -> &HashMap<String, String> {
65        &self.0.custom_vars
66    }
67
68    /// 获取扩展信息
69    #[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/// 对象上传参数构建器
82#[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    /// 设置区域信息提供者
101    #[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    /// 设置对象名称
108    #[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    /// 设置文件名称
115    #[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    /// 设置 MIME 类型
122    #[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    /// 设置对象元信息
129    #[inline]
130    pub fn metadata(&mut self, metadata: HashMap<String, String>) -> &mut Self {
131        self.0.metadata = metadata;
132        self
133    }
134
135    /// 添加对象元信息
136    #[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    /// 设置对象自定义变量
143    #[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    /// 添加对象自定义变量
150    #[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    /// 设置扩展信息
157    #[inline]
158    pub fn extensions(&mut self, extensions: Extensions) -> &mut Self {
159        self.0.extensions = extensions;
160        self
161    }
162
163    /// 添加扩展信息
164    #[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    /// 构建对象上传参数
171    #[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}