qiniu_objects_manager/
lib.rs

1#![cfg_attr(feature = "docs", feature(doc_cfg))]
2#![deny(
3    single_use_lifetimes,
4    missing_debug_implementations,
5    large_assignments,
6    exported_private_dependencies,
7    absolute_paths_not_starting_with_crate,
8    anonymous_parameters,
9    explicit_outlives_requirements,
10    keyword_idents,
11    macro_use_extern_crate,
12    meta_variable_misuse,
13    missing_docs,
14    non_ascii_idents,
15    indirect_structural_match,
16    trivial_numeric_casts,
17    unreachable_pub,
18    unsafe_code,
19    unused_extern_crates,
20    unused_import_braces,
21    unused_qualifications
22)]
23
24//! # qiniu-objects-manager
25//!
26//! ## 七牛对象管理
27//!
28//! 基于 `qiniu-apis` 提供针对七牛对象的管理功能
29//! (同时提供阻塞客户端和异步客户端,异步客户端则需要启用 `async` 功能),
30//! 主要负责七牛对象的列举和操作。
31//!
32//! ### 功能描述
33//!
34//! #### `async`
35//!
36//! 启用异步接口。
37//!
38//! #### `ureq`
39//!
40//! 导入 `qiniu-ureq` 作为 HTTP 客户端。
41//!
42//! #### `isahc`
43//!
44//! 导入 `qiniu-isahc` 作为 HTTP 客户端。
45//!
46//! #### `reqwest`
47//!
48//! 导入 `qiniu-reqwest` 作为 HTTP 客户端。
49//!
50//! #### `c_ares`
51//!
52//! 启用 `c-ares` 库作为 DNS 解析器。
53//!
54//! #### `trust_dns`
55//!
56//! 启用 `trust-dns` 库作为 DNS 解析器。
57//!
58//! #### `dns-over-https`
59//!
60//! 启用 `trust-dns` 库作为 DNS 解析器,并使用 DOH 协议。
61//!
62//! #### `dns-over-tls`
63//!
64//! 启用 `trust-dns` 库作为 DNS 解析器,并使用 DOT 协议。
65//!
66//! ### 代码示例
67//!
68//! #### 对象元信息获取
69//!
70//! ##### 阻塞代码示例
71//!
72//! ```
73//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager};
74//!
75//! # fn example() -> anyhow::Result<()> {
76//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
77//! let object_manager = ObjectsManager::new(credential);
78//! let bucket = object_manager.bucket("test-bucket");
79//!
80//! let response = bucket.stat_object("test-key").call()?;
81//! let object = response.into_body();
82//! println!("fsize: {}", object.get_size_as_u64());
83//! println!("hash: {}", object.get_hash_as_str());
84//! println!("mime_type: {}", object.get_mime_type_as_str());
85//! # Ok(())
86//! # }
87//! ```
88//!
89//! ##### 异步代码示例
90//!
91//! ```
92//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager};
93//!
94//! # async fn example() -> anyhow::Result<()> {
95//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
96//! let object_manager = ObjectsManager::new(credential);
97//! let bucket = object_manager.bucket("test-bucket");
98//!
99//! let response = bucket.stat_object("test-key").async_call().await?;
100//! let object = response.into_body();
101//! println!("fsize: {}", object.get_size_as_u64());
102//! println!("hash: {}", object.get_hash_as_str());
103//! println!("mime_type: {}", object.get_mime_type_as_str());
104//! # Ok(())
105//! # }
106//! ```
107//!
108//! #### 对象批量元信息获取
109//!
110//! ##### 阻塞代码示例
111//!
112//! ```
113//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager, OperationProvider};
114//!
115//! # fn example() -> anyhow::Result<()> {
116//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
117//! let object_manager = ObjectsManager::new(credential);
118//! let bucket = object_manager.bucket("test-bucket");
119//! let mut ops = bucket.batch_ops();
120//! ops.add_operation(bucket.stat_object("test-file-1"));
121//! ops.add_operation(bucket.stat_object("test-file-2"));
122//! ops.add_operation(bucket.stat_object("test-file-3"));
123//! ops.add_operation(bucket.stat_object("test-file-4"));
124//! ops.add_operation(bucket.stat_object("test-file-5"));
125//! let mut iter = ops.call();
126//! while let Some(object) = iter.next() {
127//!     let object = object?;
128//!     println!("fsize: {:?}", object.get_size_as_u64());
129//!     println!("hash: {:?}", object.get_hash_as_str());
130//!     println!("mime_type: {:?}", object.get_mime_type_as_str());
131//! }
132//! # Ok(())
133//! # }
134//! ```
135//!
136//! ##### 异步代码示例
137//!
138//! ```
139//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager, OperationProvider};
140//! use futures::stream::TryStreamExt;
141//!
142//! # async fn example() -> anyhow::Result<()> {
143//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
144//! let object_manager = ObjectsManager::new(credential);
145//! let bucket = object_manager.bucket("test-bucket");
146//! let mut ops = bucket.batch_ops();
147//! ops.add_operation(bucket.stat_object("test-file-1"));
148//! ops.add_operation(bucket.stat_object("test-file-2"));
149//! ops.add_operation(bucket.stat_object("test-file-3"));
150//! ops.add_operation(bucket.stat_object("test-file-4"));
151//! ops.add_operation(bucket.stat_object("test-file-5"));
152//! let mut stream = ops.async_call();
153//! while let Some(object) = stream.try_next().await? {
154//!     println!("fsize: {:?}", object.get_size_as_u64());
155//!     println!("hash: {:?}", object.get_hash_as_str());
156//!     println!("mime_type: {:?}", object.get_mime_type_as_str());
157//! }
158//! # Ok(())
159//! # }
160//! ```
161//!
162//! #### 对象列举
163//!
164//! ##### 阻塞代码示例
165//!
166//! ```
167//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager};
168//!
169//! # async fn example() -> anyhow::Result<()> {
170//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
171//! let object_manager = ObjectsManager::new(credential);
172//! let bucket = object_manager.bucket("test-bucket");
173//! let mut iter = bucket.list().iter();
174//! while let Some(object) = iter.next() {
175//!     let object = object?;
176//!     println!("fsize: {:?}", object.get_size_as_u64());
177//!     println!("hash: {:?}", object.get_hash_as_str());
178//!     println!("mime_type: {:?}", object.get_mime_type_as_str());
179//! }
180//! # Ok(())
181//! # }
182//! ```
183//!
184//! ##### 异步代码示例
185//!
186//! ```
187//! use qiniu_objects_manager::{apis::credential::Credential, ObjectsManager};
188//! use futures::stream::TryStreamExt;
189//!
190//! # async fn example() -> anyhow::Result<()> {
191//! let credential = Credential::new("abcdefghklmnopq", "1234567890");
192//! let object_manager = ObjectsManager::new(credential);
193//! let bucket = object_manager.bucket("test-bucket");
194//! let mut stream = bucket.list().stream();
195//! while let Some(object) = stream.try_next().await? {
196//!     println!("fsize: {:?}", object.get_size_as_u64());
197//!     println!("hash: {:?}", object.get_hash_as_str());
198//!     println!("mime_type: {:?}", object.get_mime_type_as_str());
199//! }
200//! # Ok(())
201//! # }
202//! ```
203
204pub use qiniu_apis as apis;
205pub use qiniu_apis::http_client::mime;
206
207mod batch_operations;
208mod bucket;
209mod callbacks;
210mod list;
211mod objects_manager;
212mod operation;
213
214pub use batch_operations::{BatchOperations, BatchOperationsIterator, BatchSizeProvider};
215pub use bucket::{Bucket, ListBuilder};
216pub use list::{ListIter, ListVersion};
217pub use objects_manager::{ObjectsManager, ObjectsManagerBuilder};
218pub use operation::{
219    AfterDays, CopyObjectBuilder, DeleteObjectBuilder, ModifyObjectLifeCycleBuilder, ModifyObjectMetadataBuilder,
220    ModifyObjectStatusBuilder, MoveObjectBuilder, OperationProvider, SetObjectTypeBuilder, StatObjectBuilder,
221    UnfreezeObjectBuilder,
222};
223
224#[cfg(feature = "async")]
225pub use {batch_operations::BatchOperationsStream, list::ListStream};
226
227/// 将所有 Trait 全部重新导出,方便统一导入
228pub mod prelude {
229    pub use super::apis::http_client::prelude::*;
230    pub use super::{BatchSizeProvider, OperationProvider};
231}