AWS SDK

AWS SDK

rev. df5c6963ef84701dba433bee7c3177286b57d59a (ignoring whitespace)

Files changed:

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib.rs

@@ -1,1 +32,40 @@
    8      8   
            let partition_dot_json = std::fs::read_to_string(partitions).expect("should be able to read a custom partition JSON");
    9      9   
            crate::endpoint_lib::partition::PartitionResolver::new_from_json(partition_dot_json.as_bytes()).expect("valid JSON")
   10     10   
        }
   11     11   
        _ => {
   12     12   
            ::tracing::debug!("loading default partitions");
   13     13   
            crate::endpoint_lib::partition::PartitionResolver::new_from_json(b"{\"partitions\":[{\"id\":\"aws\",\"outputs\":{\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"implicitGlobalRegion\":\"us-east-1\",\"name\":\"aws\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^(us|eu|ap|sa|ca|me|af|il|mx)\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"af-south-1\":{\"description\":\"Africa (Cape Town)\"},\"ap-east-1\":{\"description\":\"Asia Pacific (Hong Kong)\"},\"ap-east-2\":{\"description\":\"Asia Pacific (Taipei)\"},\"ap-northeast-1\":{\"description\":\"Asia Pacific (Tokyo)\"},\"ap-northeast-2\":{\"description\":\"Asia Pacific (Seoul)\"},\"ap-northeast-3\":{\"description\":\"Asia Pacific (Osaka)\"},\"ap-south-1\":{\"description\":\"Asia Pacific (Mumbai)\"},\"ap-south-2\":{\"description\":\"Asia Pacific (Hyderabad)\"},\"ap-southeast-1\":{\"description\":\"Asia Pacific (Singapore)\"},\"ap-southeast-2\":{\"description\":\"Asia Pacific (Sydney)\"},\"ap-southeast-3\":{\"description\":\"Asia Pacific (Jakarta)\"},\"ap-southeast-4\":{\"description\":\"Asia Pacific (Melbourne)\"},\"ap-southeast-5\":{\"description\":\"Asia Pacific (Malaysia)\"},\"ap-southeast-6\":{\"description\":\"Asia Pacific (New Zealand)\"},\"ap-southeast-7\":{\"description\":\"Asia Pacific (Thailand)\"},\"aws-global\":{\"description\":\"aws global region\"},\"ca-central-1\":{\"description\":\"Canada (Central)\"},\"ca-west-1\":{\"description\":\"Canada West (Calgary)\"},\"eu-central-1\":{\"description\":\"Europe (Frankfurt)\"},\"eu-central-2\":{\"description\":\"Europe (Zurich)\"},\"eu-north-1\":{\"description\":\"Europe (Stockholm)\"},\"eu-south-1\":{\"description\":\"Europe (Milan)\"},\"eu-south-2\":{\"description\":\"Europe (Spain)\"},\"eu-west-1\":{\"description\":\"Europe (Ireland)\"},\"eu-west-2\":{\"description\":\"Europe (London)\"},\"eu-west-3\":{\"description\":\"Europe (Paris)\"},\"il-central-1\":{\"description\":\"Israel (Tel Aviv)\"},\"me-central-1\":{\"description\":\"Middle East (UAE)\"},\"me-south-1\":{\"description\":\"Middle East (Bahrain)\"},\"mx-central-1\":{\"description\":\"Mexico (Central)\"},\"sa-east-1\":{\"description\":\"South America (Sao Paulo)\"},\"us-east-1\":{\"description\":\"US East (N. Virginia)\"},\"us-east-2\":{\"description\":\"US East (Ohio)\"},\"us-west-1\":{\"description\":\"US West (N. California)\"},\"us-west-2\":{\"description\":\"US West (Oregon)\"}}},{\"id\":\"aws-cn\",\"outputs\":{\"dnsSuffix\":\"amazonaws.com.cn\",\"dualStackDnsSuffix\":\"api.amazonwebservices.com.cn\",\"implicitGlobalRegion\":\"cn-northwest-1\",\"name\":\"aws-cn\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^cn\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-cn-global\":{\"description\":\"aws-cn global region\"},\"cn-north-1\":{\"description\":\"China (Beijing)\"},\"cn-northwest-1\":{\"description\":\"China (Ningxia)\"}}},{\"id\":\"aws-eusc\",\"outputs\":{\"dnsSuffix\":\"amazonaws.eu\",\"dualStackDnsSuffix\":\"api.amazonwebservices.eu\",\"implicitGlobalRegion\":\"eusc-de-east-1\",\"name\":\"aws-eusc\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^eusc\\\\-(de)\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"eusc-de-east-1\":{\"description\":\"EU (Germany)\"}}},{\"id\":\"aws-iso\",\"outputs\":{\"dnsSuffix\":\"c2s.ic.gov\",\"dualStackDnsSuffix\":\"api.aws.ic.gov\",\"implicitGlobalRegion\":\"us-iso-east-1\",\"name\":\"aws-iso\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-iso-global\":{\"description\":\"aws-iso global region\"},\"us-iso-east-1\":{\"description\":\"US ISO East\"},\"us-iso-west-1\":{\"description\":\"US ISO WEST\"}}},{\"id\":\"aws-iso-b\",\"outputs\":{\"dnsSuffix\":\"sc2s.sgov.gov\",\"dualStackDnsSuffix\":\"api.aws.scloud\",\"implicitGlobalRegion\":\"us-isob-east-1\",\"name\":\"aws-iso-b\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-iso-b-global\":{\"description\":\"aws-iso-b global region\"},\"us-isob-east-1\":{\"description\":\"US ISOB East (Ohio)\"}}},{\"id\":\"aws-iso-e\",\"outputs\":{\"dnsSuffix\":\"cloud.adc-e.uk\",\"dualStackDnsSuffix\":\"api.cloud-aws.adc-e.uk\",\"implicitGlobalRegion\":\"eu-isoe-west-1\",\"name\":\"aws-iso-e\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^eu\\\\-isoe\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-iso-e-global\":{\"description\":\"aws-iso-e global region\"},\"eu-isoe-west-1\":{\"description\":\"EU ISOE West\"}}},{\"id\":\"aws-iso-f\",\"outputs\":{\"dnsSuffix\":\"csp.hci.ic.gov\",\"dualStackDnsSuffix\":\"api.aws.hci.ic.gov\",\"implicitGlobalRegion\":\"us-isof-south-1\",\"name\":\"aws-iso-f\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^us\\\\-isof\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-iso-f-global\":{\"description\":\"aws-iso-f global region\"},\"us-isof-east-1\":{\"description\":\"US ISOF EAST\"},\"us-isof-south-1\":{\"description\":\"US ISOF SOUTH\"}}},{\"id\":\"aws-us-gov\",\"outputs\":{\"dnsSuffix\":\"amazonaws.com\",\"dualStackDnsSuffix\":\"api.aws\",\"implicitGlobalRegion\":\"us-gov-west-1\",\"name\":\"aws-us-gov\",\"supportsDualStack\":true,\"supportsFIPS\":true},\"regionRegex\":\"^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$\",\"regions\":{\"aws-us-gov-global\":{\"description\":\"aws-us-gov global region\"},\"us-gov-east-1\":{\"description\":\"AWS GovCloud (US-East)\"},\"us-gov-west-1\":{\"description\":\"AWS GovCloud (US-West)\"}}}],\"version\":\"1.1\"}").expect("valid JSON")
   14     14   
        }
   15     15   
    },
   16     16   
);
   17     17   
   18         -
pub(crate) mod diagnostic;
          18  +
pub(crate) mod arn;
   19     19   
   20         -
pub(crate) mod partition;
          20  +
pub(crate) mod bdd_interpreter;
   21     21   
   22         -
pub(crate) mod arn;
          22  +
pub(crate) mod coalesce;
          23  +
          24  +
pub(crate) mod diagnostic;
   23     25   
   24     26   
pub(crate) mod host;
   25     27   
          28  +
pub(crate) mod ite;
          29  +
   26     30   
pub(crate) mod parse_url;
   27     31   
          32  +
pub(crate) mod partition;
          33  +
   28     34   
pub(crate) mod s3;
   29     35   
          36  +
pub(crate) mod split;
          37  +
   30     38   
pub(crate) mod substring;
   31     39   
   32     40   
pub(crate) mod uri_encode;

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/arn.rs

@@ -1,1 +42,42 @@
    2      2   
/*
    3      3   
 *  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    4      4   
 *  SPDX-License-Identifier: Apache-2.0
    5      5   
 */
    6      6   
    7      7   
use crate::endpoint_lib::diagnostic::DiagnosticCollector;
    8      8   
use std::borrow::Cow;
    9      9   
use std::error::Error;
   10     10   
use std::fmt::{Display, Formatter};
   11     11   
   12         -
#[derive(Debug, Eq, PartialEq)]
          12  +
#[derive(Debug, Eq, PartialEq, Clone, Default)]
   13     13   
pub(crate) struct Arn<'a> {
   14     14   
    partition: &'a str,
   15     15   
    service: &'a str,
   16     16   
    region: &'a str,
   17     17   
    account_id: &'a str,
   18     18   
    resource_id: Vec<&'a str>,
   19     19   
}
   20     20   
   21     21   
#[allow(unused)]
   22     22   
impl<'a> Arn<'a> {

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/bdd_interpreter.rs

@@ -0,1 +0,67 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           3  +
/*
           4  +
 *  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           5  +
 *  SPDX-License-Identifier: Apache-2.0
           6  +
 */
           7  +
           8  +
//TODO(bdd): Should this just be an [i32; 3]? Might make it easier to make things const?
           9  +
/// Binary Decision Diagram node representation
          10  +
#[derive(Debug, Clone, Copy)]
          11  +
pub(crate) struct BddNode {
          12  +
    pub condition_index: i32,
          13  +
    pub high_ref: i32,
          14  +
    pub low_ref: i32,
          15  +
}
          16  +
          17  +
/// Evaluates a BDD to resolve an endpoint result
          18  +
///
          19  +
/// Arguments
          20  +
/// * `nodes` - Array of BddNodes
          21  +
/// * `conditions` - Array of conditions referenced by nodes
          22  +
/// * `results` - Array of possible results
          23  +
/// * `root_ref` - Root reference to start evaluation
          24  +
/// * `params` - Parameters for condition evaluation
          25  +
/// * `context` - Values that can be set/mutated by the conditions
          26  +
/// * `diagnostic_collector` - a struct for collecting information about the execution of conditions
          27  +
/// * `condition_evaluator` - Function to evaluate individual conditions with params and context
          28  +
///
          29  +
/// Returns
          30  +
/// * `Some(R)` - Result if evaluation succeeds
          31  +
/// * `None` - No match found
          32  +
#[allow(clippy::too_many_arguments)]
          33  +
pub(crate) fn evaluate_bdd<'a, Cond, Params, Res: Clone, Context>(
          34  +
    nodes: &[BddNode],
          35  +
    conditions: &[Cond],
          36  +
    results: &[Res],
          37  +
    root_ref: i32,
          38  +
    params: &'a Params,
          39  +
    context: &mut Context,
          40  +
    diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector,
          41  +
    mut condition_evaluator: impl FnMut(&Cond, &'a Params, &mut Context, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector) -> bool,
          42  +
) -> Option<Res> {
          43  +
    let mut current_ref = root_ref;
          44  +
          45  +
    loop {
          46  +
        match current_ref {
          47  +
            // Result references (>= 100_000_000)
          48  +
            ref_val if ref_val >= 100_000_000 => {
          49  +
                let result_index = (ref_val - 100_000_000) as usize;
          50  +
                return results.get(result_index).cloned();
          51  +
            }
          52  +
            // Terminals (1 = TRUE, -1 = FALSE) NoMatchRule
          53  +
            1 | -1 => return results.first().cloned(),
          54  +
            // Node references
          55  +
            ref_val => {
          56  +
                let is_complement = ref_val < 0;
          57  +
                let node_index = (ref_val.abs() - 1) as usize;
          58  +
                let node = nodes.get(node_index)?;
          59  +
                let condition_index = node.condition_index as usize;
          60  +
                let condition = conditions.get(condition_index)?;
          61  +
                let condition_result = condition_evaluator(condition, params, context, diagnostic_collector);
          62  +
                // Handle complement edges: complement inverts the branch selection
          63  +
                current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
          64  +
            }
          65  +
        }
          66  +
    }
          67  +
}

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/coalesce.rs

@@ -0,1 +0,209 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
/*
           3  +
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           4  +
 * SPDX-License-Identifier: Apache-2.0
           5  +
 */
           6  +
           7  +
//! Coalesce function that returns the first non-None value.
           8  +
           9  +
/*
          10  +
 * Implementation Note: Autoderef Specialization
          11  +
 *
          12  +
 * This implementation uses autoderef specialization to dispatch to different
          13  +
 * coalesce behaviors based on the types of the two arguments at compile time.
          14  +
 *
          15  +
 * The technique exploits Rust's method resolution, which automatically dereferences
          16  +
 * types to find matching method implementations. Method resolution prefers implementations
          17  +
 * that require fewer dereferences, creating a priority ordering.
          18  +
 *
          19  +
 * Three specialization levels (highest to lowest priority):
          20  +
 *
          21  +
 * 1. `&&&(&Option<T>, &Option<T>)` - Both args are Option
          22  +
 *    Returns: Option<T> via a.or(b)
          23  +
 *
          24  +
 * 2. `&&(&Option<T>, &T)` - First arg is Option, second is concrete
          25  +
 *    Returns: T via a.unwrap_or(b)
          26  +
 *
          27  +
 * 3. `&(&T, &U)` - Both args are concrete (or any other combination)
          28  +
 *    Returns: T (always returns first arg)
          29  +
 *
          30  +
 * The macro call `(&&&(&a, &b)).coalesce()` starts with three references. Method resolution
          31  +
 * tries each impl in order by dereferencing:
          32  +
 * - First tries `&&&(&Option<T>, &Option<T>)` (no deref needed) - matches if both are Option
          33  +
 * - Then tries `&&(&Option<T>, &T)` (one deref) - matches if first is Option, second isn't
          34  +
 * - Finally tries `&(&T, &U)` (two derefs) - matches everything else
          35  +
 *
          36  +
 * This allows the macro to handle Option/non-Option combinations without runtime checks,
          37  +
 * selecting the appropriate coalesce logic at compile time based on argument types.
          38  +
 */
          39  +
          40  +
/// Helper trait to implement the coalesce! macro
          41  +
pub(crate) trait Coalesce {
          42  +
    /// The first arg
          43  +
    type Arg1;
          44  +
    /// The second arg
          45  +
    type Arg2;
          46  +
    /// The result of comparing Arg1 and Arg1
          47  +
    type Result;
          48  +
          49  +
    /// Evaluates arguments in order and returns the first non-empty result, otherwise returns the result of the last argument.
          50  +
    fn coalesce(&self) -> fn(Self::Arg1, Self::Arg2) -> Self::Result;
          51  +
}
          52  +
          53  +
impl<T> Coalesce for &&&(&Option<T>, &Option<T>) {
          54  +
    type Arg1 = Option<T>;
          55  +
    type Arg2 = Option<T>;
          56  +
    type Result = Option<T>;
          57  +
          58  +
    fn coalesce(&self) -> fn(Self::Arg1, Self::Arg2) -> Self::Result {
          59  +
        |a: Option<T>, b: Option<T>| a.or(b)
          60  +
    }
          61  +
}
          62  +
          63  +
impl<T> Coalesce for &&(&Option<T>, &T) {
          64  +
    type Arg1 = Option<T>;
          65  +
    type Arg2 = T;
          66  +
    type Result = T;
          67  +
          68  +
    fn coalesce(&self) -> fn(Self::Arg1, Self::Arg2) -> Self::Result {
          69  +
        |a: Option<T>, b: T| a.unwrap_or(b)
          70  +
    }
          71  +
}
          72  +
          73  +
impl<T, U> Coalesce for &(&T, &U) {
          74  +
    type Arg1 = T;
          75  +
    type Arg2 = U;
          76  +
    type Result = T;
          77  +
          78  +
    fn coalesce(&self) -> fn(Self::Arg1, Self::Arg2) -> Self::Result {
          79  +
        |a: T, _b| a
          80  +
    }
          81  +
}
          82  +
          83  +
/// Evaluates arguments in order and returns the first non-empty result, otherwise returns the result of the last argument.
          84  +
macro_rules! coalesce {
          85  +
    ($a:expr) => {$a};
          86  +
    ($a:expr, $b:expr) => {{
          87  +
        use crate::endpoint_lib::coalesce::Coalesce;
          88  +
        let a = $a;
          89  +
        let b = $b;
          90  +
        (&&&(&a, &b)).coalesce()(a, b)
          91  +
    }};
          92  +
    ($a:expr, $b:expr $(, $c:expr)* $(,)?) => {
          93  +
        $crate::endpoint_lib::coalesce::coalesce!($crate::endpoint_lib::coalesce::coalesce!($a, $b) $(, $c)*)
          94  +
    }
          95  +
}
          96  +
          97  +
pub(crate) use coalesce;
          98  +
          99  +
#[cfg(test)]
         100  +
mod test {
         101  +
    use super::*;
         102  +
         103  +
    #[test]
         104  +
    fn base_cases() {
         105  +
        // All types optional
         106  +
        let a = Some("a");
         107  +
        let b = Some("b");
         108  +
         109  +
        assert_eq!(coalesce!(a, b), Some("a"));
         110  +
         111  +
        let a = None;
         112  +
        let b = Some("b");
         113  +
         114  +
        assert_eq!(coalesce!(a, b), Some("b"));
         115  +
         116  +
        let a = Some("a");
         117  +
        let b = None;
         118  +
         119  +
        assert_eq!(coalesce!(a, b), Some("a"));
         120  +
         121  +
        let a: Option<&str> = None;
         122  +
        let b: Option<&str> = None;
         123  +
         124  +
        assert_eq!(coalesce!(a, b), None);
         125  +
         126  +
        // Some non-optional types
         127  +
        let a = "a";
         128  +
        let b = Some("b");
         129  +
         130  +
        assert_eq!(coalesce!(a, b), "a");
         131  +
         132  +
        let a = Some("a");
         133  +
        let b = "b";
         134  +
         135  +
        assert_eq!(coalesce!(a, b), "a");
         136  +
         137  +
        let a = None;
         138  +
        let b = "b";
         139  +
         140  +
        assert_eq!(coalesce!(a, b), "b");
         141  +
         142  +
        let a = "a";
         143  +
        let b: Option<&str> = None;
         144  +
         145  +
        assert_eq!(coalesce!(a, b), "a");
         146  +
         147  +
        // All types non-optional
         148  +
        let a = "a";
         149  +
        let b = "b";
         150  +
         151  +
        assert_eq!(coalesce!(a, b), "a");
         152  +
         153  +
        // Works with trailing comma (makes codegen easier)
         154  +
        let a = "a";
         155  +
        let b = "b";
         156  +
         157  +
        assert_eq!(coalesce!(a, b,), "a");
         158  +
    }
         159  +
         160  +
    #[test]
         161  +
    fn longer_cases() {
         162  +
        assert_eq!(coalesce!(None, None, None, None, None, None, None, None, None, None, "a"), "a");
         163  +
         164  +
        // In the generated code all of the inputs are typed variables, so the turbofish isn't needed in practice
         165  +
        assert_eq!(
         166  +
            coalesce!(
         167  +
                None,
         168  +
                None,
         169  +
                None,
         170  +
                None,
         171  +
                "a",
         172  +
                None::<&str>,
         173  +
                None::<&str>,
         174  +
                None::<&str>,
         175  +
                None::<&str>,
         176  +
                None::<&str>,
         177  +
                None::<&str>
         178  +
            ),
         179  +
            "a"
         180  +
        );
         181  +
         182  +
        assert_eq!(
         183  +
            coalesce!(
         184  +
                None,
         185  +
                None,
         186  +
                None,
         187  +
                None,
         188  +
                "a",
         189  +
                None::<&str>,
         190  +
                Some("b"),
         191  +
                None::<&str>,
         192  +
                None::<&str>,
         193  +
                None::<&str>,
         194  +
                "c"
         195  +
            ),
         196  +
            "a"
         197  +
        );
         198  +
         199  +
        assert_eq!(coalesce!(None, None, None, Some("a"), None, None, None, None, None, None, "b"), "a");
         200  +
        assert_eq!(
         201  +
            coalesce!(Some("a"), None, None, Some("b"), None, None, None, None, None, None,),
         202  +
            Some("a")
         203  +
        );
         204  +
         205  +
        assert_eq!(coalesce!("a", "b", "c", "d", "e", "f", "g",), "a");
         206  +
         207  +
        assert_eq!(coalesce!(None, None, None, None, None, None, None, None, None, None::<&str>,), None);
         208  +
    }
         209  +
}

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/diagnostic.rs

@@ -7,7 +45,46 @@
   27     27   
    pub(crate) fn capture<T, E: Into<Box<dyn Error + Send + Sync>>>(&mut self, err: Result<T, E>) -> Option<T> {
   28     28   
        match err {
   29     29   
            Ok(res) => Some(res),
   30     30   
            Err(e) => {
   31     31   
                self.report_error(e);
   32     32   
                None
   33     33   
            }
   34     34   
        }
   35     35   
    }
   36     36   
          37  +
    #[allow(dead_code)]
   37     38   
    pub(crate) fn take_last_error(&mut self) -> Option<Box<dyn Error + Send + Sync>> {
   38     39   
        self.last_error.take()
   39     40   
    }
   40     41   
   41     42   
    /// Create a new diagnostic collector
   42     43   
    pub(crate) fn new() -> Self {
   43     44   
        Self { last_error: None }
   44     45   
    }
   45     46   
}

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/ite.rs

@@ -0,1 +0,138 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
/*
           3  +
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           4  +
 * SPDX-License-Identifier: Apache-2.0
           5  +
 */
           6  +
           7  +
//! if-then-else (ite) function that takes in a bool and two (portentially optional)
           8  +
//! values, choosing which one of those values to return based on the value
           9  +
//! of the bool.
          10  +
          11  +
// Implementation Note: ite uses the same autoderef specialization trick as the coalesce
          12  +
// macro. You can read more about how it works in the block comment above that macro.
          13  +
          14  +
/// Helper trait to implement the ite! macro
          15  +
pub(crate) trait Ite {
          16  +
    /// The first arg
          17  +
    type Arg1;
          18  +
    /// The second arg
          19  +
    type Arg2;
          20  +
    /// The result type
          21  +
    type Result;
          22  +
          23  +
    /// Evaluates arguments, returns Arg1 if the boolean is true, and Arg2 if it is false
          24  +
    fn ite(&self) -> fn(&bool, Self::Arg1, Self::Arg2) -> Self::Result;
          25  +
}
          26  +
          27  +
impl<T> Ite for &&&&(&Option<T>, &Option<T>) {
          28  +
    type Arg1 = Option<T>;
          29  +
    type Arg2 = Option<T>;
          30  +
    type Result = Option<T>;
          31  +
          32  +
    fn ite(&self) -> fn(&bool, Self::Arg1, Self::Arg2) -> Self::Result {
          33  +
        |b: &bool, true_val: Option<T>, false_val: Option<T>| {
          34  +
            if *b {
          35  +
                true_val
          36  +
            } else {
          37  +
                false_val
          38  +
            }
          39  +
        }
          40  +
    }
          41  +
}
          42  +
          43  +
impl<T> Ite for &&&(&Option<T>, &T) {
          44  +
    type Arg1 = Option<T>;
          45  +
    type Arg2 = T;
          46  +
    type Result = Option<T>;
          47  +
          48  +
    fn ite(&self) -> fn(&bool, Self::Arg1, Self::Arg2) -> Self::Result {
          49  +
        |b: &bool, true_val: Option<T>, false_val: T| {
          50  +
            if *b {
          51  +
                true_val
          52  +
            } else {
          53  +
                Some(false_val)
          54  +
            }
          55  +
        }
          56  +
    }
          57  +
}
          58  +
          59  +
impl<T> Ite for &&(&T, &Option<T>) {
          60  +
    type Arg1 = T;
          61  +
    type Arg2 = Option<T>;
          62  +
    type Result = Option<T>;
          63  +
          64  +
    fn ite(&self) -> fn(&bool, Self::Arg1, Self::Arg2) -> Self::Result {
          65  +
        |b: &bool, true_val: T, false_val: Option<T>| {
          66  +
            if *b {
          67  +
                Some(true_val)
          68  +
            } else {
          69  +
                false_val
          70  +
            }
          71  +
        }
          72  +
    }
          73  +
}
          74  +
          75  +
impl<T> Ite for &(&T, &T) {
          76  +
    type Arg1 = T;
          77  +
    type Arg2 = T;
          78  +
    type Result = T;
          79  +
          80  +
    fn ite(&self) -> fn(&bool, Self::Arg1, Self::Arg2) -> Self::Result {
          81  +
        |b: &bool, true_val: T, false_val: T| {
          82  +
            if *b {
          83  +
                true_val
          84  +
            } else {
          85  +
                false_val
          86  +
            }
          87  +
        }
          88  +
    }
          89  +
}
          90  +
          91  +
macro_rules! ite {
          92  +
    ($b:expr, $true_val:expr, $false_val:expr) => {{
          93  +
        use crate::endpoint_lib::ite::Ite;
          94  +
        let b = $b;
          95  +
        let true_val = $true_val;
          96  +
        let false_val = $false_val;
          97  +
        (&&&&(&true_val, &false_val)).ite()(&b, true_val, false_val)
          98  +
    }};
          99  +
}
         100  +
         101  +
pub(crate) use ite;
         102  +
         103  +
#[cfg(test)]
         104  +
mod test {
         105  +
    use super::*;
         106  +
         107  +
    #[test]
         108  +
    fn base_cases() {
         109  +
        // All types optional
         110  +
        let a = "a";
         111  +
        let some_a = Some("a");
         112  +
        let b = "b";
         113  +
        let some_b = Some("b");
         114  +
        let none: Option<&str> = None;
         115  +
         116  +
        // Option, Option
         117  +
        assert_eq!(ite!(true, some_a, some_b), Some("a"));
         118  +
        assert_eq!(ite!(false, some_a, some_b), Some("b"));
         119  +
        assert_eq!(ite!(false, some_a, none), None);
         120  +
        assert_eq!(ite!(true, some_a, none), Some("a"));
         121  +
         122  +
        // Option, Value
         123  +
        assert_eq!(ite!(true, some_a, b), Some("a"));
         124  +
        assert_eq!(ite!(false, some_a, b), Some("b"));
         125  +
        assert_eq!(ite!(true, none, b), None);
         126  +
        assert_eq!(ite!(false, none, b), Some("b"));
         127  +
         128  +
        // Value, Option
         129  +
        assert_eq!(ite!(true, a, some_b), Some("a"));
         130  +
        assert_eq!(ite!(false, a, some_b), Some("b"));
         131  +
        assert_eq!(ite!(false, a, none), None);
         132  +
        assert_eq!(ite!(true, a, none), Some("a"));
         133  +
         134  +
        // Value, Value
         135  +
        assert_eq!(ite!(true, a, b), "a");
         136  +
        assert_eq!(ite!(false, a, b), "b");
         137  +
    }
         138  +
}

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/parse_url.rs

@@ -1,1 +47,57 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
/*
    3      3   
 *  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
    4      4   
 *  SPDX-License-Identifier: Apache-2.0
    5      5   
 */
    6      6   
    7      7   
use crate::endpoint_lib::diagnostic::DiagnosticCollector;
    8      8   
use http_1x::Uri;
    9      9   
use url::{Host, Url as ParsedUrl};
   10     10   
   11         -
#[derive(PartialEq, Debug)]
          11  +
#[derive(PartialEq, Debug, Clone)]
   12     12   
pub(crate) struct Url<'a> {
   13     13   
    uri: Uri,
   14     14   
    url: ParsedUrl,
   15     15   
    raw: &'a str,
   16     16   
}
   17     17   
          18  +
impl Default for Url<'_> {
          19  +
    fn default() -> Self {
          20  +
        Self {
          21  +
            uri: Uri::from_static("https://localhost"),
          22  +
            url: ParsedUrl::parse("https://localhost").unwrap(),
          23  +
            raw: "https://localhost",
          24  +
        }
          25  +
    }
          26  +
}
          27  +
   18     28   
// individual methods on parse_url might not be used (although the [`parse_url`] itself _MUST_ be used
   19     29   
// since stdlib functions are pulled into crate lazily)
   20     30   
#[allow(unused)]
   21     31   
impl Url<'_> {
   22     32   
    pub(crate) fn is_ip(&self) -> bool {
   23     33   
        matches!(self.url.host(), Some(Host::Ipv4(_) | Host::Ipv6(_)))
   24     34   
    }
   25     35   
    pub(crate) fn scheme(&self) -> &str {
   26     36   
        self.url.scheme()
   27     37   
    }

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/partition.rs

@@ -3,3 +62,63 @@
   23     23   
    partitions: Vec<PartitionMetadata>,
   24     24   
}
   25     25   
   26     26   
impl PartitionResolver {
   27     27   
    pub(crate) fn from_partitions(partitions: Vec<PartitionMetadata>) -> Self {
   28     28   
        Self { partitions }
   29     29   
    }
   30     30   
}
   31     31   
   32     32   
/// Partition result returned from partition resolver
          33  +
#[derive(Debug, Default, Clone)]
   33     34   
pub(crate) struct Partition<'a> {
   34     35   
    name: &'a str,
   35     36   
    dns_suffix: &'a str,
   36     37   
    dual_stack_dns_suffix: &'a str,
   37     38   
    supports_fips: bool,
   38     39   
    supports_dual_stack: bool,
   39     40   
    implicit_global_region: &'a str,
   40     41   
}
   41     42   
   42     43   
#[allow(unused)]

tmp-codegen-diff/aws-sdk/sdk/s3/src/endpoint_lib/split.rs

@@ -0,1 +0,81 @@
           1  +
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
           2  +
/*
           3  +
 *  Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
           4  +
 *  SPDX-License-Identifier: Apache-2.0
           5  +
 */
           6  +
           7  +
use crate::endpoint_lib::diagnostic::DiagnosticCollector;
           8  +
           9  +
/// Splits a string into an array of substrings based on a delimiter.
          10  +
/// Specification for this function can be found in the [Smithy spec](https://smithy.io/2.0/additional-specs/rules-engine/standard-library.html#split-function).
          11  +
///
          12  +
/// ### Arguments
          13  +
/// * `value` - The input string to split
          14  +
/// * `delimiter` - The separator (must be non-empty)
          15  +
/// * `limit` - Controls split behavior:
          16  +
///   - `0`: Split all occurrences
          17  +
///   - `1`: No split (returns original string as single element)
          18  +
///   - `>1`: Split into at most 'limit' parts
          19  +
///
          20  +
/// ### Returns
          21  +
/// `Vec<&str>` containing the split parts
          22  +
//TODO(BDD): Might be better to return Vec<String>, will play with it when I get some codegen tests that actually use this function
          23  +
pub(crate) fn split<'a>(value: &'a str, delimiter: &str, limit: usize, _dc: &mut DiagnosticCollector) -> Vec<&'a str> {
          24  +
    if limit == 0 {
          25  +
        return value.split(delimiter).collect();
          26  +
    }
          27  +
          28  +
    value.splitn(limit, delimiter).collect()
          29  +
}
          30  +
          31  +
// Test cases sourced from Smithy spec:
          32  +
// https://smithy.io/2.0/additional-specs/rules-engine/standard-library.html#rules-engine-standard-library-split-examples
          33  +
#[cfg(test)]
          34  +
mod tests {
          35  +
    use super::*;
          36  +
          37  +
    #[test]
          38  +
    fn test_split_unlimited() {
          39  +
        assert_eq!(split("a--b--c", "--", 0, &mut DiagnosticCollector::new()), vec!["a", "b", "c"]);
          40  +
        assert_eq!(
          41  +
            split("--x-s3--azid--suffix", "--", 0, &mut DiagnosticCollector::new()),
          42  +
            vec!["", "x-s3", "azid", "suffix"]
          43  +
        );
          44  +
    }
          45  +
          46  +
    #[test]
          47  +
    fn test_split_with_limit() {
          48  +
        assert_eq!(split("a--b--c", "--", 2, &mut DiagnosticCollector::new()), vec!["a", "b--c"]);
          49  +
        assert_eq!(
          50  +
            split("--x-s3--azid--suffix", "--", 2, &mut DiagnosticCollector::new()),
          51  +
            vec!["", "x-s3--azid--suffix"]
          52  +
        );
          53  +
    }
          54  +
          55  +
    #[test]
          56  +
    fn test_split_no_split() {
          57  +
        assert_eq!(split("a--b--c", "--", 1, &mut DiagnosticCollector::new()), vec!["a--b--c"]);
          58  +
        assert_eq!(split("mybucket", "--", 1, &mut DiagnosticCollector::new()), vec!["mybucket"]);
          59  +
    }
          60  +
          61  +
    #[test]
          62  +
    fn test_split_empty_string() {
          63  +
        assert_eq!(split("", "--", 0, &mut DiagnosticCollector::new()), vec![""]);
          64  +
    }
          65  +
          66  +
    #[test]
          67  +
    fn test_split_delimiter_only() {
          68  +
        assert_eq!(split("--", "--", 0, &mut DiagnosticCollector::new()), vec!["", ""]);
          69  +
        assert_eq!(split("----", "--", 0, &mut DiagnosticCollector::new()), vec!["", "", ""]);
          70  +
    }
          71  +
          72  +
    #[test]
          73  +
    fn test_split_with_empty_parts() {
          74  +
        assert_eq!(split("--b--", "--", 0, &mut DiagnosticCollector::new()), vec!["", "b", ""]);
          75  +
    }
          76  +
          77  +
    #[test]
          78  +
    fn test_split_no_delimiter_found() {
          79  +
        assert_eq!(split("abc", "x", 0, &mut DiagnosticCollector::new()), vec!["abc"]);
          80  +
    }
          81  +
}

tmp-codegen-diff/aws-sdk/sdk/s3/src/error_meta.rs

@@ -778,778 +837,858 @@
  798    798   
        }
  799    799   
    }
  800    800   
}
  801    801   
impl From<crate::operation::delete_public_access_block::DeletePublicAccessBlockError> for Error {
  802    802   
    fn from(err: crate::operation::delete_public_access_block::DeletePublicAccessBlockError) -> Self {
  803    803   
        match err {
  804    804   
            crate::operation::delete_public_access_block::DeletePublicAccessBlockError::Unhandled(inner) => Error::Unhandled(inner),
  805    805   
        }
  806    806   
    }
  807    807   
}
         808  +
impl<R> From<::aws_smithy_runtime_api::client::result::SdkError<crate::operation::get_bucket_abac::GetBucketAbacError, R>> for Error
         809  +
where
         810  +
    R: Send + Sync + std::fmt::Debug + 'static,
         811  +
{
         812  +
    fn from(err: ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::get_bucket_abac::GetBucketAbacError, R>) -> Self {
         813  +
        match err {
         814  +
            ::aws_smithy_runtime_api::client::result::SdkError::ServiceError(context) => Self::from(context.into_err()),
         815  +
            _ => Error::Unhandled(crate::error::sealed_unhandled::Unhandled {
         816  +
                meta: ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(&err).clone(),
         817  +
                source: err.into(),
         818  +
            }),
         819  +
        }
         820  +
    }
         821  +
}
         822  +
impl From<crate::operation::get_bucket_abac::GetBucketAbacError> for Error {
         823  +
    fn from(err: crate::operation::get_bucket_abac::GetBucketAbacError) -> Self {
         824  +
        match err {
         825  +
            crate::operation::get_bucket_abac::GetBucketAbacError::Unhandled(inner) => Error::Unhandled(inner),
         826  +
        }
         827  +
    }
         828  +
}
  808    829   
impl<R>
  809    830   
    From<
  810    831   
        ::aws_smithy_runtime_api::client::result::SdkError<
  811    832   
            crate::operation::get_bucket_accelerate_configuration::GetBucketAccelerateConfigurationError,
  812    833   
            R,
  813    834   
        >,
  814    835   
    > for Error
  815    836   
where
  816    837   
    R: Send + Sync + std::fmt::Debug + 'static,
  817    838   
{
@@ -1875,1896 +1934,1976 @@
 1895   1916   
        }
 1896   1917   
    }
 1897   1918   
}
 1898   1919   
impl From<crate::operation::list_parts::ListPartsError> for Error {
 1899   1920   
    fn from(err: crate::operation::list_parts::ListPartsError) -> Self {
 1900   1921   
        match err {
 1901   1922   
            crate::operation::list_parts::ListPartsError::Unhandled(inner) => Error::Unhandled(inner),
 1902   1923   
        }
 1903   1924   
    }
 1904   1925   
}
        1926  +
impl<R> From<::aws_smithy_runtime_api::client::result::SdkError<crate::operation::put_bucket_abac::PutBucketAbacError, R>> for Error
        1927  +
where
        1928  +
    R: Send + Sync + std::fmt::Debug + 'static,
        1929  +
{
        1930  +
    fn from(err: ::aws_smithy_runtime_api::client::result::SdkError<crate::operation::put_bucket_abac::PutBucketAbacError, R>) -> Self {
        1931  +
        match err {
        1932  +
            ::aws_smithy_runtime_api::client::result::SdkError::ServiceError(context) => Self::from(context.into_err()),
        1933  +
            _ => Error::Unhandled(crate::error::sealed_unhandled::Unhandled {
        1934  +
                meta: ::aws_smithy_types::error::metadata::ProvideErrorMetadata::meta(&err).clone(),
        1935  +
                source: err.into(),
        1936  +
            }),
        1937  +
        }
        1938  +
    }
        1939  +
}
        1940  +
impl From<crate::operation::put_bucket_abac::PutBucketAbacError> for Error {
        1941  +
    fn from(err: crate::operation::put_bucket_abac::PutBucketAbacError) -> Self {
        1942  +
        match err {
        1943  +
            crate::operation::put_bucket_abac::PutBucketAbacError::Unhandled(inner) => Error::Unhandled(inner),
        1944  +
        }
        1945  +
    }
        1946  +
}
 1905   1947   
impl<R>
 1906   1948   
    From<
 1907   1949   
        ::aws_smithy_runtime_api::client::result::SdkError<
 1908   1950   
            crate::operation::put_bucket_accelerate_configuration::PutBucketAccelerateConfigurationError,
 1909   1951   
            R,
 1910   1952   
        >,
 1911   1953   
    > for Error
 1912   1954   
where
 1913   1955   
    R: Send + Sync + std::fmt::Debug + 'static,
 1914   1956   
{

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation.rs

@@ -57,57 +116,119 @@
   77     77   
   78     78   
/// Types for the `DeleteObjectTagging` operation.
   79     79   
pub mod delete_object_tagging;
   80     80   
   81     81   
/// Types for the `DeleteObjects` operation.
   82     82   
pub mod delete_objects;
   83     83   
   84     84   
/// Types for the `DeletePublicAccessBlock` operation.
   85     85   
pub mod delete_public_access_block;
   86     86   
          87  +
/// Types for the `GetBucketAbac` operation.
          88  +
pub mod get_bucket_abac;
          89  +
   87     90   
/// Types for the `GetBucketAccelerateConfiguration` operation.
   88     91   
pub mod get_bucket_accelerate_configuration;
   89     92   
   90     93   
/// Types for the `GetBucketAcl` operation.
   91     94   
pub mod get_bucket_acl;
   92     95   
   93     96   
/// Types for the `GetBucketAnalyticsConfiguration` operation.
   94     97   
pub mod get_bucket_analytics_configuration;
   95     98   
   96     99   
/// Types for the `GetBucketCors` operation.
@@ -189,192 +248,254 @@
  209    212   
  210    213   
/// Types for the `ListObjects` operation.
  211    214   
pub mod list_objects;
  212    215   
  213    216   
/// Types for the `ListObjectsV2` operation.
  214    217   
pub mod list_objects_v2;
  215    218   
  216    219   
/// Types for the `ListParts` operation.
  217    220   
pub mod list_parts;
  218    221   
         222  +
/// Types for the `PutBucketAbac` operation.
         223  +
pub mod put_bucket_abac;
         224  +
  219    225   
/// Types for the `PutBucketAccelerateConfiguration` operation.
  220    226   
pub mod put_bucket_accelerate_configuration;
  221    227   
  222    228   
/// Types for the `PutBucketAcl` operation.
  223    229   
pub mod put_bucket_acl;
  224    230   
  225    231   
/// Types for the `PutBucketAnalyticsConfiguration` operation.
  226    232   
pub mod put_bucket_analytics_configuration;
  227    233   
  228    234   
/// Types for the `PutBucketCors` operation.

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation/abort_multipart_upload/builders.rs

@@ -35,35 +95,97 @@
   55     55   
/// <li>
   56     56   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a></p></li>
   57     57   
/// <li>
   58     58   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a></p></li>
   59     59   
/// <li>
   60     60   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html">CompleteMultipartUpload</a></p></li>
   61     61   
/// <li>
   62     62   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a></p></li>
   63     63   
/// <li>
   64     64   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a></p></li>
   65         -
/// </ul>
          65  +
/// </ul><important>
          66  +
/// <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p>
          67  +
/// </important>
   66     68   
#[derive(::std::clone::Clone, ::std::fmt::Debug)]
   67     69   
pub struct AbortMultipartUploadFluentBuilder {
   68     70   
    handle: ::std::sync::Arc<crate::client::Handle>,
   69     71   
    inner: crate::operation::abort_multipart_upload::builders::AbortMultipartUploadInputBuilder,
   70     72   
    config_override: ::std::option::Option<crate::config::Builder>,
   71     73   
}
   72     74   
impl
   73     75   
    crate::client::customize::internal::CustomizableSend<
   74     76   
        crate::operation::abort_multipart_upload::AbortMultipartUploadOutput,
   75     77   
        crate::operation::abort_multipart_upload::AbortMultipartUploadError,

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation/complete_multipart_upload/_complete_multipart_upload_output.rs

@@ -1,1 +123,123 @@
   10     10   
    /// </note>
   11     11   
    pub bucket: ::std::option::Option<::std::string::String>,
   12     12   
    /// <p>The object key of the newly created object.</p>
   13     13   
    pub key: ::std::option::Option<::std::string::String>,
   14     14   
    /// <p>If the object expiration is configured, this will contain the expiration date (<code>expiry-date</code>) and rule ID (<code>rule-id</code>). The value of <code>rule-id</code> is URL-encoded.</p><note>
   15     15   
    /// <p>This functionality is not supported for directory buckets.</p>
   16     16   
    /// </note>
   17     17   
    pub expiration: ::std::option::Option<::std::string::String>,
   18     18   
    /// <p>Entity tag that identifies the newly created object's data. Objects with different object data will have different entity tags. The entity tag is an opaque string. The entity tag may or may not be an MD5 digest of the object data. If the entity tag is not an MD5 digest of the object data, it will contain one or more nonhexadecimal characters and/or will consist of less than 32 or more than 32 hexadecimal digits. For more information about how the entity tag is calculated, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   19     19   
    pub e_tag: ::std::option::Option<::std::string::String>,
   20         -
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          20  +
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   21     21   
    pub checksum_crc32: ::std::option::Option<::std::string::String>,
   22     22   
    /// <p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   23     23   
    pub checksum_crc32_c: ::std::option::Option<::std::string::String>,
   24     24   
    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
   25     25   
    pub checksum_crc64_nvme: ::std::option::Option<::std::string::String>,
   26         -
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          26  +
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   27     27   
    pub checksum_sha1: ::std::option::Option<::std::string::String>,
   28         -
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          28  +
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   29     29   
    pub checksum_sha256: ::std::option::Option<::std::string::String>,
   30     30   
    /// <p>The checksum type, which determines how part-level checksums are combined to create an object-level checksum for multipart objects. You can use this header as a data integrity check to verify that the checksum type that is received is the same checksum type that was specified during the <code>CreateMultipartUpload</code> request. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
   31     31   
    pub checksum_type: ::std::option::Option<crate::types::ChecksumType>,
   32     32   
    /// <p>The server-side encryption algorithm used when storing this object in Amazon S3.</p><note>
   33     33   
    /// <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p>
   34     34   
    /// </note>
   35     35   
    /// <p></p>
   36     36   
    pub server_side_encryption: ::std::option::Option<crate::types::ServerSideEncryption>,
   37     37   
    /// <p>Version ID of the newly created object, in case the bucket has versioning turned on.</p><note>
   38     38   
    /// <p>This functionality is not supported for directory buckets.</p>
   39     39   
    /// </note>
   40     40   
    pub version_id: ::std::option::Option<::std::string::String>,
   41     41   
    /// <p>If present, indicates the ID of the KMS key that was used for object encryption.</p>
   42     42   
    pub ssekms_key_id: ::std::option::Option<::std::string::String>,
   43     43   
    /// <p>Indicates whether the multipart upload uses an S3 Bucket Key for server-side encryption with Key Management Service (KMS) keys (SSE-KMS).</p>
   44     44   
    pub bucket_key_enabled: ::std::option::Option<bool>,
   45     45   
    /// <p>If present, indicates that the requester was successfully charged for the request. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/RequesterPaysBuckets.html">Using Requester Pays buckets for storage transfers and usage</a> in the <i>Amazon Simple Storage Service user guide</i>.</p><note>
   46     46   
    /// <p>This functionality is not supported for directory buckets.</p>
   47     47   
    /// </note>
   48     48   
    pub request_charged: ::std::option::Option<crate::types::RequestCharged>,
   49     49   
    _extended_request_id: Option<String>,
   50     50   
    _request_id: Option<String>,
   51     51   
}
   52     52   
impl CompleteMultipartUploadOutput {
   53     53   
    /// <p>The URI that identifies the newly created object.</p>
   54     54   
    pub fn location(&self) -> ::std::option::Option<&str> {
   55     55   
        self.location.as_deref()
   56     56   
    }
   57     57   
    /// <p>The name of the bucket that contains the newly created object. Does not return the access point ARN or access point alias if used.</p><note>
   58     58   
    /// <p>Access points are not supported by directory buckets.</p>
   59     59   
    /// </note>
   60     60   
    pub fn bucket(&self) -> ::std::option::Option<&str> {
   61     61   
        self.bucket.as_deref()
   62     62   
    }
   63     63   
    /// <p>The object key of the newly created object.</p>
   64     64   
    pub fn key(&self) -> ::std::option::Option<&str> {
   65     65   
        self.key.as_deref()
   66     66   
    }
   67     67   
    /// <p>If the object expiration is configured, this will contain the expiration date (<code>expiry-date</code>) and rule ID (<code>rule-id</code>). The value of <code>rule-id</code> is URL-encoded.</p><note>
   68     68   
    /// <p>This functionality is not supported for directory buckets.</p>
   69     69   
    /// </note>
   70     70   
    pub fn expiration(&self) -> ::std::option::Option<&str> {
   71     71   
        self.expiration.as_deref()
   72     72   
    }
   73     73   
    /// <p>Entity tag that identifies the newly created object's data. Objects with different object data will have different entity tags. The entity tag is an opaque string. The entity tag may or may not be an MD5 digest of the object data. If the entity tag is not an MD5 digest of the object data, it will contain one or more nonhexadecimal characters and/or will consist of less than 32 or more than 32 hexadecimal digits. For more information about how the entity tag is calculated, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   74     74   
    pub fn e_tag(&self) -> ::std::option::Option<&str> {
   75     75   
        self.e_tag.as_deref()
   76     76   
    }
   77         -
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          77  +
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   78     78   
    pub fn checksum_crc32(&self) -> ::std::option::Option<&str> {
   79     79   
        self.checksum_crc32.as_deref()
   80     80   
    }
   81     81   
    /// <p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   82     82   
    pub fn checksum_crc32_c(&self) -> ::std::option::Option<&str> {
   83     83   
        self.checksum_crc32_c.as_deref()
   84     84   
    }
   85     85   
    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
   86     86   
    pub fn checksum_crc64_nvme(&self) -> ::std::option::Option<&str> {
   87     87   
        self.checksum_crc64_nvme.as_deref()
   88     88   
    }
   89         -
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          89  +
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   90     90   
    pub fn checksum_sha1(&self) -> ::std::option::Option<&str> {
   91     91   
        self.checksum_sha1.as_deref()
   92     92   
    }
   93         -
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
          93  +
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
   94     94   
    pub fn checksum_sha256(&self) -> ::std::option::Option<&str> {
   95     95   
        self.checksum_sha256.as_deref()
   96     96   
    }
   97     97   
    /// <p>The checksum type, which determines how part-level checksums are combined to create an object-level checksum for multipart objects. You can use this header as a data integrity check to verify that the checksum type that is received is the same checksum type that was specified during the <code>CreateMultipartUpload</code> request. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
   98     98   
    pub fn checksum_type(&self) -> ::std::option::Option<&crate::types::ChecksumType> {
   99     99   
        self.checksum_type.as_ref()
  100    100   
    }
  101    101   
    /// <p>The server-side encryption algorithm used when storing this object in Amazon S3.</p><note>
  102    102   
    /// <p>When accessing data stored in Amazon FSx file systems using S3 access points, the only valid server side encryption option is <code>aws:fsx</code>.</p>
  103    103   
    /// </note>
@@ -246,246 +372,372 @@
  266    266   
    }
  267    267   
    /// <p>Entity tag that identifies the newly created object's data. Objects with different object data will have different entity tags. The entity tag is an opaque string. The entity tag may or may not be an MD5 digest of the object data. If the entity tag is not an MD5 digest of the object data, it will contain one or more nonhexadecimal characters and/or will consist of less than 32 or more than 32 hexadecimal digits. For more information about how the entity tag is calculated, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  268    268   
    pub fn set_e_tag(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  269    269   
        self.e_tag = input;
  270    270   
        self
  271    271   
    }
  272    272   
    /// <p>Entity tag that identifies the newly created object's data. Objects with different object data will have different entity tags. The entity tag is an opaque string. The entity tag may or may not be an MD5 digest of the object data. If the entity tag is not an MD5 digest of the object data, it will contain one or more nonhexadecimal characters and/or will consist of less than 32 or more than 32 hexadecimal digits. For more information about how the entity tag is calculated, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  273    273   
    pub fn get_e_tag(&self) -> &::std::option::Option<::std::string::String> {
  274    274   
        &self.e_tag
  275    275   
    }
  276         -
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         276  +
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  277    277   
    pub fn checksum_crc32(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  278    278   
        self.checksum_crc32 = ::std::option::Option::Some(input.into());
  279    279   
        self
  280    280   
    }
  281         -
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         281  +
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  282    282   
    pub fn set_checksum_crc32(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  283    283   
        self.checksum_crc32 = input;
  284    284   
        self
  285    285   
    }
  286         -
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only be present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         286  +
    /// <p>The Base64 encoded, 32-bit <code>CRC32 checksum</code> of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  287    287   
    pub fn get_checksum_crc32(&self) -> &::std::option::Option<::std::string::String> {
  288    288   
        &self.checksum_crc32
  289    289   
    }
  290    290   
    /// <p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  291    291   
    pub fn checksum_crc32_c(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  292    292   
        self.checksum_crc32_c = ::std::option::Option::Some(input.into());
  293    293   
        self
  294    294   
    }
  295    295   
    /// <p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  296    296   
    pub fn set_checksum_crc32_c(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  297    297   
        self.checksum_crc32_c = input;
  298    298   
        self
  299    299   
    }
  300    300   
    /// <p>The Base64 encoded, 32-bit <code>CRC32C</code> checksum of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  301    301   
    pub fn get_checksum_crc32_c(&self) -> &::std::option::Option<::std::string::String> {
  302    302   
        &self.checksum_crc32_c
  303    303   
    }
  304    304   
    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
  305    305   
    pub fn checksum_crc64_nvme(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  306    306   
        self.checksum_crc64_nvme = ::std::option::Option::Some(input.into());
  307    307   
        self
  308    308   
    }
  309    309   
    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
  310    310   
    pub fn set_checksum_crc64_nvme(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  311    311   
        self.checksum_crc64_nvme = input;
  312    312   
        self
  313    313   
    }
  314    314   
    /// <p>This header can be used as a data integrity check to verify that the data received is the same data that was originally sent. This header specifies the Base64 encoded, 64-bit <code>CRC64NVME</code> checksum of the object. The <code>CRC64NVME</code> checksum is always a full object checksum. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
  315    315   
    pub fn get_checksum_crc64_nvme(&self) -> &::std::option::Option<::std::string::String> {
  316    316   
        &self.checksum_crc64_nvme
  317    317   
    }
  318         -
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         318  +
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  319    319   
    pub fn checksum_sha1(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  320    320   
        self.checksum_sha1 = ::std::option::Option::Some(input.into());
  321    321   
        self
  322    322   
    }
  323         -
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         323  +
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  324    324   
    pub fn set_checksum_sha1(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  325    325   
        self.checksum_sha1 = input;
  326    326   
        self
  327    327   
    }
  328         -
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This will only be present if the object was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         328  +
    /// <p>The Base64 encoded, 160-bit <code>SHA1</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use the API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  329    329   
    pub fn get_checksum_sha1(&self) -> &::std::option::Option<::std::string::String> {
  330    330   
        &self.checksum_sha1
  331    331   
    }
  332         -
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         332  +
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  333    333   
    pub fn checksum_sha256(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  334    334   
        self.checksum_sha256 = ::std::option::Option::Some(input.into());
  335    335   
        self
  336    336   
    }
  337         -
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         337  +
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  338    338   
    pub fn set_checksum_sha256(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  339    339   
        self.checksum_sha256 = input;
  340    340   
        self
  341    341   
    }
  342         -
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This will only be present if the object was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
         342  +
    /// <p>The Base64 encoded, 256-bit <code>SHA256</code> digest of the object. This checksum is only present if the checksum was uploaded with the object. When you use an API operation on an object that was uploaded using multipart uploads, this value may not be a direct checksum value of the full object. Instead, it's a calculation based on the checksum values of each individual part. For more information about how checksums are calculated with multipart uploads, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html#large-object-checksums"> Checking object integrity</a> in the <i>Amazon S3 User Guide</i>.</p>
  343    343   
    pub fn get_checksum_sha256(&self) -> &::std::option::Option<::std::string::String> {
  344    344   
        &self.checksum_sha256
  345    345   
    }
  346    346   
    /// <p>The checksum type, which determines how part-level checksums are combined to create an object-level checksum for multipart objects. You can use this header as a data integrity check to verify that the checksum type that is received is the same checksum type that was specified during the <code>CreateMultipartUpload</code> request. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
  347    347   
    pub fn checksum_type(mut self, input: crate::types::ChecksumType) -> Self {
  348    348   
        self.checksum_type = ::std::option::Option::Some(input);
  349    349   
        self
  350    350   
    }
  351    351   
    /// <p>The checksum type, which determines how part-level checksums are combined to create an object-level checksum for multipart objects. You can use this header as a data integrity check to verify that the checksum type that is received is the same checksum type that was specified during the <code>CreateMultipartUpload</code> request. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/checking-object-integrity.html">Checking object integrity in the Amazon S3 User Guide</a>.</p>
  352    352   
    pub fn set_checksum_type(mut self, input: ::std::option::Option<crate::types::ChecksumType>) -> Self {

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation/complete_multipart_upload/builders.rs

@@ -76,76 +136,138 @@
   96     96   
/// <li>
   97     97   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html">CreateMultipartUpload</a></p></li>
   98     98   
/// <li>
   99     99   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html">UploadPart</a></p></li>
  100    100   
/// <li>
  101    101   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html">AbortMultipartUpload</a></p></li>
  102    102   
/// <li>
  103    103   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html">ListParts</a></p></li>
  104    104   
/// <li>
  105    105   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html">ListMultipartUploads</a></p></li>
  106         -
/// </ul>
         106  +
/// </ul><important>
         107  +
/// <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p>
         108  +
/// </important>
  107    109   
#[derive(::std::clone::Clone, ::std::fmt::Debug)]
  108    110   
pub struct CompleteMultipartUploadFluentBuilder {
  109    111   
    handle: ::std::sync::Arc<crate::client::Handle>,
  110    112   
    inner: crate::operation::complete_multipart_upload::builders::CompleteMultipartUploadInputBuilder,
  111    113   
    config_override: ::std::option::Option<crate::config::Builder>,
  112    114   
}
  113    115   
impl
  114    116   
    crate::client::customize::internal::CustomizableSend<
  115    117   
        crate::operation::complete_multipart_upload::CompleteMultipartUploadOutput,
  116    118   
        crate::operation::complete_multipart_upload::CompleteMultipartUploadError,

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation/copy_object/_copy_object_input.rs

@@ -129,129 +188,196 @@
  149    149   
    pub grant_read_acp: ::std::option::Option<::std::string::String>,
  150    150   
    /// <p>Allows grantee to write the ACL for the applicable object.</p><note>
  151    151   
    /// <ul>
  152    152   
    /// <li>
  153    153   
    /// <p>This functionality is not supported for directory buckets.</p></li>
  154    154   
    /// <li>
  155    155   
    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
  156    156   
    /// </ul>
  157    157   
    /// </note>
  158    158   
    pub grant_write_acp: ::std::option::Option<::std::string::String>,
         159  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
         160  +
    /// <p>Expects the ETag value as a string.</p>
         161  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         162  +
    pub if_match: ::std::option::Option<::std::string::String>,
         163  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
         164  +
    /// <p>Expects the '*' (asterisk) character.</p>
         165  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         166  +
    pub if_none_match: ::std::option::Option<::std::string::String>,
  159    167   
    /// <p>The key of the destination object.</p>
  160    168   
    pub key: ::std::option::Option<::std::string::String>,
  161    169   
    /// <p>A map of metadata to store with the object in S3.</p>
  162    170   
    pub metadata: ::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>>,
  163    171   
    /// <p>Specifies whether the metadata is copied from the source object or replaced with metadata that's provided in the request. When copying an object, you can preserve all metadata (the default) or specify new metadata. If this header isn’t specified, <code>COPY</code> is the default behavior.</p>
  164    172   
    /// <p><b>General purpose bucket</b> - For general purpose buckets, when you grant permissions, you can use the <code>s3:x-amz-metadata-directive</code> condition key to enforce certain metadata behavior when objects are uploaded. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html">Amazon S3 condition key examples</a> in the <i>Amazon S3 User Guide</i>.</p><note>
  165    173   
    /// <p><code>x-amz-website-redirect-location</code> is unique to each object and is not copied when using the <code>x-amz-metadata-directive</code> header. To copy the value, you must specify <code>x-amz-website-redirect-location</code> in the request header.</p>
  166    174   
    /// </note>
  167    175   
    pub metadata_directive: ::std::option::Option<crate::types::MetadataDirective>,
  168    176   
    /// <p>Specifies whether the object tag-set is copied from the source object or replaced with the tag-set that's provided in the request.</p>
@@ -480,488 +539,559 @@
  500    508   
    /// <ul>
  501    509   
    /// <li>
  502    510   
    /// <p>This functionality is not supported for directory buckets.</p></li>
  503    511   
    /// <li>
  504    512   
    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
  505    513   
    /// </ul>
  506    514   
    /// </note>
  507    515   
    pub fn grant_write_acp(&self) -> ::std::option::Option<&str> {
  508    516   
        self.grant_write_acp.as_deref()
  509    517   
    }
         518  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
         519  +
    /// <p>Expects the ETag value as a string.</p>
         520  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         521  +
    pub fn if_match(&self) -> ::std::option::Option<&str> {
         522  +
        self.if_match.as_deref()
         523  +
    }
         524  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
         525  +
    /// <p>Expects the '*' (asterisk) character.</p>
         526  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         527  +
    pub fn if_none_match(&self) -> ::std::option::Option<&str> {
         528  +
        self.if_none_match.as_deref()
         529  +
    }
  510    530   
    /// <p>The key of the destination object.</p>
  511    531   
    pub fn key(&self) -> ::std::option::Option<&str> {
  512    532   
        self.key.as_deref()
  513    533   
    }
  514    534   
    /// <p>A map of metadata to store with the object in S3.</p>
  515    535   
    pub fn metadata(&self) -> ::std::option::Option<&::std::collections::HashMap<::std::string::String, ::std::string::String>> {
  516    536   
        self.metadata.as_ref()
  517    537   
    }
  518    538   
    /// <p>Specifies whether the metadata is copied from the source object or replaced with metadata that's provided in the request. When copying an object, you can preserve all metadata (the default) or specify new metadata. If this header isn’t specified, <code>COPY</code> is the default behavior.</p>
  519    539   
    /// <p><b>General purpose bucket</b> - For general purpose buckets, when you grant permissions, you can use the <code>s3:x-amz-metadata-directive</code> condition key to enforce certain metadata behavior when objects are uploaded. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/amazon-s3-policy-keys.html">Amazon S3 condition key examples</a> in the <i>Amazon S3 User Guide</i>.</p><note>
@@ -708,728 +822,846 @@
  728    748   
        formatter.field("copy_source", &self.copy_source);
  729    749   
        formatter.field("copy_source_if_match", &self.copy_source_if_match);
  730    750   
        formatter.field("copy_source_if_modified_since", &self.copy_source_if_modified_since);
  731    751   
        formatter.field("copy_source_if_none_match", &self.copy_source_if_none_match);
  732    752   
        formatter.field("copy_source_if_unmodified_since", &self.copy_source_if_unmodified_since);
  733    753   
        formatter.field("expires", &self.expires);
  734    754   
        formatter.field("grant_full_control", &self.grant_full_control);
  735    755   
        formatter.field("grant_read", &self.grant_read);
  736    756   
        formatter.field("grant_read_acp", &self.grant_read_acp);
  737    757   
        formatter.field("grant_write_acp", &self.grant_write_acp);
         758  +
        formatter.field("if_match", &self.if_match);
         759  +
        formatter.field("if_none_match", &self.if_none_match);
  738    760   
        formatter.field("key", &self.key);
  739    761   
        formatter.field("metadata", &self.metadata);
  740    762   
        formatter.field("metadata_directive", &self.metadata_directive);
  741    763   
        formatter.field("tagging_directive", &self.tagging_directive);
  742    764   
        formatter.field("server_side_encryption", &self.server_side_encryption);
  743    765   
        formatter.field("storage_class", &self.storage_class);
  744    766   
        formatter.field("website_redirect_location", &self.website_redirect_location);
  745    767   
        formatter.field("sse_customer_algorithm", &self.sse_customer_algorithm);
  746    768   
        formatter.field("sse_customer_key", &"*** Sensitive Data Redacted ***");
  747    769   
        formatter.field("sse_customer_key_md5", &self.sse_customer_key_md5);
  748    770   
        formatter.field("ssekms_key_id", &"*** Sensitive Data Redacted ***");
  749    771   
        formatter.field("ssekms_encryption_context", &"*** Sensitive Data Redacted ***");
  750    772   
        formatter.field("bucket_key_enabled", &self.bucket_key_enabled);
  751    773   
        formatter.field("copy_source_sse_customer_algorithm", &self.copy_source_sse_customer_algorithm);
  752    774   
        formatter.field("copy_source_sse_customer_key", &"*** Sensitive Data Redacted ***");
  753    775   
        formatter.field("copy_source_sse_customer_key_md5", &self.copy_source_sse_customer_key_md5);
  754    776   
        formatter.field("request_payer", &self.request_payer);
  755    777   
        formatter.field("tagging", &self.tagging);
  756    778   
        formatter.field("object_lock_mode", &self.object_lock_mode);
  757    779   
        formatter.field("object_lock_retain_until_date", &self.object_lock_retain_until_date);
  758    780   
        formatter.field("object_lock_legal_hold_status", &self.object_lock_legal_hold_status);
  759    781   
        formatter.field("expected_bucket_owner", &self.expected_bucket_owner);
  760    782   
        formatter.field("expected_source_bucket_owner", &self.expected_source_bucket_owner);
  761    783   
        formatter.finish()
  762    784   
    }
  763    785   
}
  764    786   
impl CopyObjectInput {
  765    787   
    /// Creates a new builder-style object to manufacture [`CopyObjectInput`](crate::operation::copy_object::CopyObjectInput).
  766    788   
    pub fn builder() -> crate::operation::copy_object::builders::CopyObjectInputBuilder {
  767    789   
        crate::operation::copy_object::builders::CopyObjectInputBuilder::default()
  768    790   
    }
  769    791   
}
  770    792   
  771    793   
/// A builder for [`CopyObjectInput`](crate::operation::copy_object::CopyObjectInput).
  772    794   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default)]
  773    795   
#[non_exhaustive]
  774    796   
pub struct CopyObjectInputBuilder {
  775    797   
    pub(crate) acl: ::std::option::Option<crate::types::ObjectCannedAcl>,
  776    798   
    pub(crate) bucket: ::std::option::Option<::std::string::String>,
  777    799   
    pub(crate) cache_control: ::std::option::Option<::std::string::String>,
  778    800   
    pub(crate) checksum_algorithm: ::std::option::Option<crate::types::ChecksumAlgorithm>,
  779    801   
    pub(crate) content_disposition: ::std::option::Option<::std::string::String>,
  780    802   
    pub(crate) content_encoding: ::std::option::Option<::std::string::String>,
  781    803   
    pub(crate) content_language: ::std::option::Option<::std::string::String>,
  782    804   
    pub(crate) content_type: ::std::option::Option<::std::string::String>,
  783    805   
    pub(crate) copy_source: ::std::option::Option<::std::string::String>,
  784    806   
    pub(crate) copy_source_if_match: ::std::option::Option<::std::string::String>,
  785    807   
    pub(crate) copy_source_if_modified_since: ::std::option::Option<::aws_smithy_types::DateTime>,
  786    808   
    pub(crate) copy_source_if_none_match: ::std::option::Option<::std::string::String>,
  787    809   
    pub(crate) copy_source_if_unmodified_since: ::std::option::Option<::aws_smithy_types::DateTime>,
  788    810   
    pub(crate) expires: ::std::option::Option<::aws_smithy_types::DateTime>,
  789    811   
    pub(crate) grant_full_control: ::std::option::Option<::std::string::String>,
  790    812   
    pub(crate) grant_read: ::std::option::Option<::std::string::String>,
  791    813   
    pub(crate) grant_read_acp: ::std::option::Option<::std::string::String>,
  792    814   
    pub(crate) grant_write_acp: ::std::option::Option<::std::string::String>,
         815  +
    pub(crate) if_match: ::std::option::Option<::std::string::String>,
         816  +
    pub(crate) if_none_match: ::std::option::Option<::std::string::String>,
  793    817   
    pub(crate) key: ::std::option::Option<::std::string::String>,
  794    818   
    pub(crate) metadata: ::std::option::Option<::std::collections::HashMap<::std::string::String, ::std::string::String>>,
  795    819   
    pub(crate) metadata_directive: ::std::option::Option<crate::types::MetadataDirective>,
  796    820   
    pub(crate) tagging_directive: ::std::option::Option<crate::types::TaggingDirective>,
  797    821   
    pub(crate) server_side_encryption: ::std::option::Option<crate::types::ServerSideEncryption>,
  798    822   
    pub(crate) storage_class: ::std::option::Option<crate::types::StorageClass>,
  799    823   
    pub(crate) website_redirect_location: ::std::option::Option<::std::string::String>,
  800    824   
    pub(crate) sse_customer_algorithm: ::std::option::Option<::std::string::String>,
  801    825   
    pub(crate) sse_customer_key: ::std::option::Option<::std::string::String>,
  802    826   
    pub(crate) sse_customer_key_md5: ::std::option::Option<::std::string::String>,
@@ -1393,1417 +1452,1516 @@
 1413   1437   
    /// <ul>
 1414   1438   
    /// <li>
 1415   1439   
    /// <p>This functionality is not supported for directory buckets.</p></li>
 1416   1440   
    /// <li>
 1417   1441   
    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
 1418   1442   
    /// </ul>
 1419   1443   
    /// </note>
 1420   1444   
    pub fn get_grant_write_acp(&self) -> &::std::option::Option<::std::string::String> {
 1421   1445   
        &self.grant_write_acp
 1422   1446   
    }
        1447  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
        1448  +
    /// <p>Expects the ETag value as a string.</p>
        1449  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1450  +
    pub fn if_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        1451  +
        self.if_match = ::std::option::Option::Some(input.into());
        1452  +
        self
        1453  +
    }
        1454  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
        1455  +
    /// <p>Expects the ETag value as a string.</p>
        1456  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1457  +
    pub fn set_if_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        1458  +
        self.if_match = input;
        1459  +
        self
        1460  +
    }
        1461  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
        1462  +
    /// <p>Expects the ETag value as a string.</p>
        1463  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1464  +
    pub fn get_if_match(&self) -> &::std::option::Option<::std::string::String> {
        1465  +
        &self.if_match
        1466  +
    }
        1467  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
        1468  +
    /// <p>Expects the '*' (asterisk) character.</p>
        1469  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1470  +
    pub fn if_none_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
        1471  +
        self.if_none_match = ::std::option::Option::Some(input.into());
        1472  +
        self
        1473  +
    }
        1474  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
        1475  +
    /// <p>Expects the '*' (asterisk) character.</p>
        1476  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1477  +
    pub fn set_if_none_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
        1478  +
        self.if_none_match = input;
        1479  +
        self
        1480  +
    }
        1481  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
        1482  +
    /// <p>Expects the '*' (asterisk) character.</p>
        1483  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
        1484  +
    pub fn get_if_none_match(&self) -> &::std::option::Option<::std::string::String> {
        1485  +
        &self.if_none_match
        1486  +
    }
 1423   1487   
    /// <p>The key of the destination object.</p>
 1424   1488   
    /// This field is required.
 1425   1489   
    pub fn key(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
 1426   1490   
        self.key = ::std::option::Option::Some(input.into());
 1427   1491   
        self
 1428   1492   
    }
 1429   1493   
    /// <p>The key of the destination object.</p>
 1430   1494   
    pub fn set_key(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
 1431   1495   
        self.key = input;
 1432   1496   
        self
@@ -2085,2149 +2187,2255 @@
 2105   2169   
            copy_source: self.copy_source,
 2106   2170   
            copy_source_if_match: self.copy_source_if_match,
 2107   2171   
            copy_source_if_modified_since: self.copy_source_if_modified_since,
 2108   2172   
            copy_source_if_none_match: self.copy_source_if_none_match,
 2109   2173   
            copy_source_if_unmodified_since: self.copy_source_if_unmodified_since,
 2110   2174   
            expires: self.expires,
 2111   2175   
            grant_full_control: self.grant_full_control,
 2112   2176   
            grant_read: self.grant_read,
 2113   2177   
            grant_read_acp: self.grant_read_acp,
 2114   2178   
            grant_write_acp: self.grant_write_acp,
        2179  +
            if_match: self.if_match,
        2180  +
            if_none_match: self.if_none_match,
 2115   2181   
            key: self.key,
 2116   2182   
            metadata: self.metadata,
 2117   2183   
            metadata_directive: self.metadata_directive,
 2118   2184   
            tagging_directive: self.tagging_directive,
 2119   2185   
            server_side_encryption: self.server_side_encryption,
 2120   2186   
            storage_class: self.storage_class,
 2121   2187   
            website_redirect_location: self.website_redirect_location,
 2122   2188   
            sse_customer_algorithm: self.sse_customer_algorithm,
 2123   2189   
            sse_customer_key: self.sse_customer_key,
 2124   2190   
            sse_customer_key_md5: self.sse_customer_key_md5,
 2125   2191   
            ssekms_key_id: self.ssekms_key_id,
 2126   2192   
            ssekms_encryption_context: self.ssekms_encryption_context,
 2127   2193   
            bucket_key_enabled: self.bucket_key_enabled,
 2128   2194   
            copy_source_sse_customer_algorithm: self.copy_source_sse_customer_algorithm,
 2129   2195   
            copy_source_sse_customer_key: self.copy_source_sse_customer_key,
 2130   2196   
            copy_source_sse_customer_key_md5: self.copy_source_sse_customer_key_md5,
 2131   2197   
            request_payer: self.request_payer,
 2132   2198   
            tagging: self.tagging,
 2133   2199   
            object_lock_mode: self.object_lock_mode,
 2134   2200   
            object_lock_retain_until_date: self.object_lock_retain_until_date,
 2135   2201   
            object_lock_legal_hold_status: self.object_lock_legal_hold_status,
 2136   2202   
            expected_bucket_owner: self.expected_bucket_owner,
 2137   2203   
            expected_source_bucket_owner: self.expected_source_bucket_owner,
 2138   2204   
        })
 2139   2205   
    }
 2140   2206   
}
 2141   2207   
impl ::std::fmt::Debug for CopyObjectInputBuilder {
 2142   2208   
    fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
 2143   2209   
        let mut formatter = f.debug_struct("CopyObjectInputBuilder");
 2144   2210   
        formatter.field("acl", &self.acl);
 2145   2211   
        formatter.field("bucket", &self.bucket);
 2146   2212   
        formatter.field("cache_control", &self.cache_control);
 2147   2213   
        formatter.field("checksum_algorithm", &self.checksum_algorithm);
 2148   2214   
        formatter.field("content_disposition", &self.content_disposition);
 2149   2215   
        formatter.field("content_encoding", &self.content_encoding);
 2150   2216   
        formatter.field("content_language", &self.content_language);
 2151   2217   
        formatter.field("content_type", &self.content_type);
 2152   2218   
        formatter.field("copy_source", &self.copy_source);
 2153   2219   
        formatter.field("copy_source_if_match", &self.copy_source_if_match);
 2154   2220   
        formatter.field("copy_source_if_modified_since", &self.copy_source_if_modified_since);
 2155   2221   
        formatter.field("copy_source_if_none_match", &self.copy_source_if_none_match);
 2156   2222   
        formatter.field("copy_source_if_unmodified_since", &self.copy_source_if_unmodified_since);
 2157   2223   
        formatter.field("expires", &self.expires);
 2158   2224   
        formatter.field("grant_full_control", &self.grant_full_control);
 2159   2225   
        formatter.field("grant_read", &self.grant_read);
 2160   2226   
        formatter.field("grant_read_acp", &self.grant_read_acp);
 2161   2227   
        formatter.field("grant_write_acp", &self.grant_write_acp);
        2228  +
        formatter.field("if_match", &self.if_match);
        2229  +
        formatter.field("if_none_match", &self.if_none_match);
 2162   2230   
        formatter.field("key", &self.key);
 2163   2231   
        formatter.field("metadata", &self.metadata);
 2164   2232   
        formatter.field("metadata_directive", &self.metadata_directive);
 2165   2233   
        formatter.field("tagging_directive", &self.tagging_directive);
 2166   2234   
        formatter.field("server_side_encryption", &self.server_side_encryption);
 2167   2235   
        formatter.field("storage_class", &self.storage_class);
 2168   2236   
        formatter.field("website_redirect_location", &self.website_redirect_location);
 2169   2237   
        formatter.field("sse_customer_algorithm", &self.sse_customer_algorithm);
 2170   2238   
        formatter.field("sse_customer_key", &"*** Sensitive Data Redacted ***");
 2171   2239   
        formatter.field("sse_customer_key_md5", &self.sse_customer_key_md5);

tmp-codegen-diff/aws-sdk/sdk/s3/src/operation/copy_object/builders.rs

@@ -1,1 +60,59 @@
   15     15   
            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
   16     16   
        >,
   17     17   
    > {
   18     18   
        let mut fluent_builder = client.copy_object();
   19     19   
        fluent_builder.inner = self;
   20     20   
        fluent_builder.send().await
   21     21   
    }
   22     22   
}
   23     23   
/// Fluent builder constructing a request to `CopyObject`.
   24     24   
///
   25         -
/// <important>
   26         -
/// <p>End of support notice: Beginning October 1, 2025, Amazon S3 will discontinue support for creating new Email Grantee Access Control Lists (ACL). Email Grantee ACLs created prior to this date will continue to work and remain accessible through the Amazon Web Services Management Console, Command Line Interface (CLI), SDKs, and REST API. However, you will no longer be able to create new Email Grantee ACLs.</p>
   27         -
/// <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia) Region, US West (N. California) Region, US West (Oregon) Region, Asia Pacific (Singapore) Region, Asia Pacific (Sydney) Region, Asia Pacific (Tokyo) Region, Europe (Ireland) Region, and South America (São Paulo) Region.</p>
   28         -
/// </important>
   29         -
/// <p>Creates a copy of an object that is already stored in Amazon S3.</p><note>
   30         -
/// <p>You can store individual objects of up to 5 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html">Copy Object Using the REST Multipart Upload API</a>.</p>
          25  +
/// <p>Creates a copy of an object that is already stored in Amazon S3.</p><important>
          26  +
/// <p>End of support notice: As of October 1, 2025, Amazon S3 has discontinued support for Email Grantee Access Control Lists (ACLs). If you attempt to use an Email Grantee ACL in a request after October 1, 2025, the request will receive an <code>HTTP 405</code> (Method Not Allowed) error.</p>
          27  +
/// <p>This change affects the following Amazon Web Services Regions: US East (N. Virginia), US West (N. California), US West (Oregon), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo), Europe (Ireland), and South America (São Paulo).</p>
          28  +
/// </important> <note>
          29  +
/// <p>You can store individual objects of up to 50 TB in Amazon S3. You create a copy of your object up to 5 GB in size in a single atomic action using this API. However, to copy an object greater than 5 GB, you must use the multipart upload Upload Part - Copy (UploadPartCopy) API. For more information, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/dev/CopyingObjctsUsingRESTMPUapi.html">Copy Object Using the REST Multipart Upload API</a>.</p>
   31     30   
/// </note>
   32     31   
/// <p>You can copy individual objects between general purpose buckets, between directory buckets, and between general purpose buckets and directory buckets.</p><note>
   33     32   
/// <ul>
   34     33   
/// <li>
   35     34   
/// <p>Amazon S3 supports copy operations using Multi-Region Access Points only as a destination when using the Multi-Region Access Point ARN.</p></li>
   36     35   
/// <li>
   37     36   
/// <p><b>Directory buckets </b> - For directory buckets, you must make requests for this API operation to the Zonal endpoint. These endpoints support virtual-hosted-style requests in the format <code>https://<i>amzn-s3-demo-bucket</i>.s3express-<i>zone-id</i>.<i>region-code</i>.amazonaws.com/<i>key-name</i> </code>. Path-style requests are not supported. For more information about endpoints in Availability Zones, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/endpoint-directory-buckets-AZ.html">Regional and Zonal endpoints for directory buckets in Availability Zones</a> in the <i>Amazon S3 User Guide</i>. For more information about endpoints in Local Zones, see <a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-lzs-for-directory-buckets.html">Concepts for directory buckets in Local Zones</a> in the <i>Amazon S3 User Guide</i>.</p></li>
   38     37   
/// <li>
   39     38   
/// <p>VPC endpoints don't support cross-Region requests (including copies). If you're using VPC endpoints, your source and destination buckets should be in the same Amazon Web Services Region as your VPC endpoint.</p></li>
   40     39   
/// </ul>
@@ -93,92 +153,154 @@
  113    112   
/// <p><b>Amazon S3 on Outposts</b> - When you use this action with S3 on Outposts through the REST API, you must direct requests to the S3 on Outposts hostname. The S3 on Outposts hostname takes the form <code> <i>AccessPointName</i>-<i>AccountId</i>.<i>outpostID</i>.s3-outposts.<i>Region</i>.amazonaws.com</code>. The hostname isn't required when you use the Amazon Web Services CLI or SDKs.</p></li>
  114    113   
/// </ul>
  115    114   
/// </dd>
  116    115   
/// </dl>
  117    116   
/// <p>The following operations are related to <code>CopyObject</code>:</p>
  118    117   
/// <ul>
  119    118   
/// <li>
  120    119   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html">PutObject</a></p></li>
  121    120   
/// <li>
  122    121   
/// <p><a href="https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html">GetObject</a></p></li>
  123         -
/// </ul>
         122  +
/// </ul><important>
         123  +
/// <p>You must URL encode any signed header values that contain spaces. For example, if your header value is <code>my file.txt</code>, containing two spaces after <code>my</code>, you must URL encode this value to <code>my%20%20file.txt</code>.</p>
         124  +
/// </important>
  124    125   
#[derive(::std::clone::Clone, ::std::fmt::Debug)]
  125    126   
pub struct CopyObjectFluentBuilder {
  126    127   
    handle: ::std::sync::Arc<crate::client::Handle>,
  127    128   
    inner: crate::operation::copy_object::builders::CopyObjectInputBuilder,
  128    129   
    config_override: ::std::option::Option<crate::config::Builder>,
  129    130   
}
  130    131   
impl
  131    132   
    crate::client::customize::internal::CustomizableSend<
  132    133   
        crate::operation::copy_object::CopyObjectOutput,
  133    134   
        crate::operation::copy_object::CopyObjectError,
@@ -782,783 +841,882 @@
  802    803   
    /// <ul>
  803    804   
    /// <li>
  804    805   
    /// <p>This functionality is not supported for directory buckets.</p></li>
  805    806   
    /// <li>
  806    807   
    /// <p>This functionality is not supported for Amazon S3 on Outposts.</p></li>
  807    808   
    /// </ul>
  808    809   
    /// </note>
  809    810   
    pub fn get_grant_write_acp(&self) -> &::std::option::Option<::std::string::String> {
  810    811   
        self.inner.get_grant_write_acp()
  811    812   
    }
         813  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
         814  +
    /// <p>Expects the ETag value as a string.</p>
         815  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         816  +
    pub fn if_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
         817  +
        self.inner = self.inner.if_match(input.into());
         818  +
        self
         819  +
    }
         820  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
         821  +
    /// <p>Expects the ETag value as a string.</p>
         822  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         823  +
    pub fn set_if_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
         824  +
        self.inner = self.inner.set_if_match(input);
         825  +
        self
         826  +
    }
         827  +
    /// <p>Copies the object if the entity tag (ETag) of the destination object matches the specified tag. If the ETag values do not match, the operation returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should fetch the object's ETag and retry the upload.</p>
         828  +
    /// <p>Expects the ETag value as a string.</p>
         829  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         830  +
    pub fn get_if_match(&self) -> &::std::option::Option<::std::string::String> {
         831  +
        self.inner.get_if_match()
         832  +
    }
         833  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
         834  +
    /// <p>Expects the '*' (asterisk) character.</p>
         835  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         836  +
    pub fn if_none_match(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
         837  +
        self.inner = self.inner.if_none_match(input.into());
         838  +
        self
         839  +
    }
         840  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
         841  +
    /// <p>Expects the '*' (asterisk) character.</p>
         842  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         843  +
    pub fn set_if_none_match(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
         844  +
        self.inner = self.inner.set_if_none_match(input);
         845  +
        self
         846  +
    }
         847  +
    /// <p>Copies the object only if the object key name at the destination does not already exist in the bucket specified. Otherwise, Amazon S3 returns a <code>412 Precondition Failed</code> error. If a concurrent operation occurs during the upload S3 returns a <code>409 ConditionalRequestConflict</code> response. On a 409 failure you should retry the upload.</p>
         848  +
    /// <p>Expects the '*' (asterisk) character.</p>
         849  +
    /// <p>For more information about conditional requests, see <a href="https://tools.ietf.org/html/rfc7232">RFC 7232</a>.</p>
         850  +
    pub fn get_if_none_match(&self) -> &::std::option::Option<::std::string::String> {
         851  +
        self.inner.get_if_none_match()
         852  +
    }
  812    853   
    /// <p>The key of the destination object.</p>
  813    854   
    pub fn key(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  814    855   
        self.inner = self.inner.key(input.into());
  815    856   
        self
  816    857   
    }
  817    858   
    /// <p>The key of the destination object.</p>
  818    859   
    pub fn set_key(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  819    860   
        self.inner = self.inner.set_key(input);
  820    861   
        self
  821    862   
    }