aws_sdk_s3/lib.rs
1#![allow(deprecated)]
2#![allow(unknown_lints)]
3#![allow(clippy::module_inception)]
4#![allow(clippy::upper_case_acronyms)]
5#![allow(clippy::large_enum_variant)]
6#![allow(clippy::wrong_self_convention)]
7#![allow(clippy::should_implement_trait)]
8#![allow(clippy::disallowed_names)]
9#![allow(clippy::vec_init_then_push)]
10#![allow(clippy::type_complexity)]
11#![allow(clippy::needless_return)]
12#![allow(clippy::derive_partial_eq_without_eq)]
13#![allow(clippy::result_large_err)]
14#![allow(clippy::unnecessary_map_on_constructor)]
15#![allow(rustdoc::bare_urls)]
16#![allow(rustdoc::redundant_explicit_links)]
17#![forbid(unsafe_code)]
18#![warn(missing_docs)]
19#![cfg_attr(docsrs, feature(doc_auto_cfg))]
20//! ## Getting Started
21//!
22//! > Examples are available for many services and operations, check out the
23//! > [examples folder in GitHub](https://github.com/awslabs/aws-sdk-rust/tree/main/examples).
24//!
25//! The SDK provides one crate per AWS service. You must add [Tokio](https://crates.io/crates/tokio)
26//! as a dependency within your Rust project to execute asynchronous code. To add `aws-sdk-s3` to
27//! your project, add the following to your **Cargo.toml** file:
28//!
29//! ```toml
30//! [dependencies]
31//! aws-config = { version = "1.1.7", features = ["behavior-version-latest"] }
32//! aws-sdk-s3 = "1.78.0"
33//! tokio = { version = "1", features = ["full"] }
34//! ```
35//!
36//! Then in code, a client can be created with the following:
37//!
38//! ```rust,no_run
39//! use aws_sdk_s3 as s3;
40//!
41//! #[::tokio::main]
42//! async fn main() -> Result<(), s3::Error> {
43//! let config = aws_config::load_from_env().await;
44//! let client = aws_sdk_s3::Client::new(&config);
45//!
46//! // ... make some calls with the client
47//!
48//! Ok(())
49//! }
50//! ```
51//!
52//! See the [client documentation](https://docs.rs/aws-sdk-s3/latest/aws_sdk_s3/client/struct.Client.html)
53//! for information on what calls can be made, and the inputs and outputs for each of those calls.
54//!
55//! ## Using the SDK
56//!
57//! Until the SDK is released, we will be adding information about using the SDK to the
58//! [Developer Guide](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/welcome.html). Feel free to suggest
59//! additional sections for the guide by opening an issue and describing what you are trying to do.
60//!
61//! ## Getting Help
62//!
63//! * [GitHub discussions](https://github.com/awslabs/aws-sdk-rust/discussions) - For ideas, RFCs & general questions
64//! * [GitHub issues](https://github.com/awslabs/aws-sdk-rust/issues/new/choose) - For bug reports & feature requests
65//! * [Generated Docs (latest version)](https://awslabs.github.io/aws-sdk-rust/)
66//! * [Usage examples](https://github.com/awslabs/aws-sdk-rust/tree/main/examples)
67//!
68//!
69//! # Crate Organization
70//!
71//! The entry point for most customers will be [`Client`], which exposes one method for each API
72//! offered by Amazon Simple Storage Service. The return value of each of these methods is a "fluent builder",
73//! where the different inputs for that API are added by builder-style function call chaining,
74//! followed by calling `send()` to get a [`Future`](std::future::Future) that will result in
75//! either a successful output or a [`SdkError`](crate::error::SdkError).
76//!
77//! Some of these API inputs may be structs or enums to provide more complex structured information.
78//! These structs and enums live in [`types`](crate::types). There are some simpler types for
79//! representing data such as date times or binary blobs that live in [`primitives`](crate::primitives).
80//!
81//! All types required to configure a client via the [`Config`](crate::Config) struct live
82//! in [`config`](crate::config).
83//!
84//! The [`operation`](crate::operation) module has a submodule for every API, and in each submodule
85//! is the input, output, and error type for that API, as well as builders to construct each of those.
86//!
87//! There is a top-level [`Error`](crate::Error) type that encompasses all the errors that the
88//! client can return. Any other error type can be converted to this `Error` type via the
89//! [`From`](std::convert::From) trait.
90//!
91//! The other modules within this crate are not required for normal usage.
92
93// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
94pub use error_meta::Error;
95
96#[doc(inline)]
97pub use config::Config;
98
99/// Client for calling Amazon Simple Storage Service.
100/// ## Constructing a `Client`
101///
102/// A [`Config`] is required to construct a client. For most use cases, the [`aws-config`]
103/// crate should be used to automatically resolve this config using
104/// [`aws_config::load_from_env()`], since this will resolve an [`SdkConfig`] which can be shared
105/// across multiple different AWS SDK clients. This config resolution process can be customized
106/// by calling [`aws_config::from_env()`] instead, which returns a [`ConfigLoader`] that uses
107/// the [builder pattern] to customize the default config.
108///
109/// In the simplest case, creating a client looks as follows:
110/// ```rust,no_run
111/// # async fn wrapper() {
112/// let config = aws_config::load_from_env().await;
113/// let client = aws_sdk_s3::Client::new(&config);
114/// # }
115/// ```
116///
117/// Occasionally, SDKs may have additional service-specific values that can be set on the [`Config`] that
118/// is absent from [`SdkConfig`], or slightly different settings for a specific client may be desired.
119/// The [`Builder`](crate::config::Builder) struct implements `From<&SdkConfig>`, so setting these specific settings can be
120/// done as follows:
121///
122/// ```rust,no_run
123/// # async fn wrapper() {
124/// let sdk_config = ::aws_config::load_from_env().await;
125/// let config = aws_sdk_s3::config::Builder::from(&sdk_config)
126/// # /*
127/// .some_service_specific_setting("value")
128/// # */
129/// .build();
130/// # }
131/// ```
132///
133/// See the [`aws-config` docs] and [`Config`] for more information on customizing configuration.
134///
135/// _Note:_ Client construction is expensive due to connection thread pool initialization, and should
136/// be done once at application start-up.
137///
138/// [`Config`]: crate::Config
139/// [`ConfigLoader`]: https://docs.rs/aws-config/*/aws_config/struct.ConfigLoader.html
140/// [`SdkConfig`]: https://docs.rs/aws-config/*/aws_config/struct.SdkConfig.html
141/// [`aws-config` docs]: https://docs.rs/aws-config/*
142/// [`aws-config`]: https://crates.io/crates/aws-config
143/// [`aws_config::from_env()`]: https://docs.rs/aws-config/*/aws_config/fn.from_env.html
144/// [`aws_config::load_from_env()`]: https://docs.rs/aws-config/*/aws_config/fn.load_from_env.html
145/// [builder pattern]: https://rust-lang.github.io/api-guidelines/type-safety.html#builders-enable-construction-of-complex-values-c-builder
146/// # Using the `Client`
147///
148/// A client has a function for every operation that can be performed by the service.
149/// For example, the [`AbortMultipartUpload`](crate::operation::abort_multipart_upload) operation has
150/// a [`Client::abort_multipart_upload`], function which returns a builder for that operation.
151/// The fluent builder ultimately has a `send()` function that returns an async future that
152/// returns a result, as illustrated below:
153///
154/// ```rust,ignore
155/// let result = client.abort_multipart_upload()
156/// .bucket("example")
157/// .send()
158/// .await;
159/// ```
160///
161/// The underlying HTTP requests that get made by this can be modified with the `customize_operation`
162/// function on the fluent builder. See the [`customize`](crate::client::customize) module for more
163/// information.
164/// # Waiters
165///
166/// This client provides `wait_until` methods behind the [`Waiters`](crate::client::Waiters) trait.
167/// To use them, simply import the trait, and then call one of the `wait_until` methods. This will
168/// return a waiter fluent builder that takes various parameters, which are documented on the builder
169/// type. Once parameters have been provided, the `wait` method can be called to initiate waiting.
170///
171/// For example, if there was a `wait_until_thing` method, it could look like:
172/// ```rust,ignore
173/// let result = client.wait_until_thing()
174/// .thing_id("someId")
175/// .wait(Duration::from_secs(120))
176/// .await;
177/// ```
178pub mod client;
179
180/// Configuration for Amazon Simple Storage Service.
181pub mod config;
182
183/// Common errors and error handling utilities.
184pub mod error;
185
186mod error_meta;
187
188/// Information about this crate.
189pub mod meta;
190
191/// All operations that this crate can perform.
192pub mod operation;
193
194/// Primitives such as `Blob` or `DateTime` used by other types.
195pub mod primitives;
196
197/// Data structures used by operation inputs/outputs.
198pub mod types;
199
200mod auth_plugin;
201
202mod event_receiver;
203
204pub(crate) mod http_request_checksum;
205
206pub(crate) mod http_response_checksum;
207
208pub mod presigning;
209
210pub(crate) mod presigning_interceptors;
211
212pub(crate) mod protocol_serde;
213
214mod rest_xml_unwrapped_errors;
215
216mod s3_expires_interceptor;
217
218mod s3_express;
219
220mod s3_request_id;
221
222mod sdk_feature_tracker;
223
224mod serialization_settings;
225
226mod endpoint_lib;
227
228mod lens;
229
230mod serde_util;
231
232/// Supporting types for waiters.
233///
234/// Note: to use waiters, import the [`Waiters`](crate::client::Waiters) trait, which adds methods prefixed with `wait_until` to the client.
235pub mod waiters;
236
237mod event_stream_serde;
238
239#[doc(inline)]
240pub use client::Client;