AWS SDK

AWS SDK

rev. 74826e0bd468b1b8eecfcb1db37848e7d64f732d

Files changed:

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/config/endpoint/internals.rs

@@ -1,0 +355,0 @@
    1         -
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2         -
#[allow(
    3         -
    clippy::collapsible_if,
    4         -
    clippy::bool_comparison,
    5         -
    clippy::nonminimal_bool,
    6         -
    clippy::comparison_to_empty,
    7         -
    clippy::redundant_pattern_matching,
    8         -
    clippy::useless_asref
    9         -
)]
   10         -
pub(super) fn resolve_endpoint(
   11         -
    _params: &crate::config::endpoint::Params,
   12         -
    _diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector,
   13         -
    partition_resolver: &crate::endpoint_lib::partition::PartitionResolver,
   14         -
) -> ::aws_smithy_http::endpoint::Result {
   15         -
    #[allow(unused_variables)]
   16         -
    let region = &_params.region;
   17         -
    #[allow(unused_variables)]
   18         -
    let use_dual_stack = &_params.use_dual_stack;
   19         -
    #[allow(unused_variables)]
   20         -
    let use_fips = &_params.use_fips;
   21         -
    #[allow(unused_variables)]
   22         -
    let endpoint = &_params.endpoint;
   23         -
    #[allow(unused_variables)]
   24         -
    let account_id = &_params.account_id;
   25         -
    #[allow(unused_variables)]
   26         -
    let account_id_endpoint_mode = &_params.account_id_endpoint_mode;
   27         -
    #[allow(unused_variables)]
   28         -
    let resource_arn = &_params.resource_arn;
   29         -
    #[allow(unused_variables)]
   30         -
    let resource_arn_list = &_params.resource_arn_list;
   31         -
    #[allow(unused_variables)]
   32         -
    if let Some(endpoint) = endpoint {
   33         -
        if (*use_fips) == (true) {
   34         -
            return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
   35         -
                "Invalid Configuration: FIPS and custom endpoint are not supported".to_string(),
   36         -
            ));
   37         -
        }
   38         -
        if (*use_dual_stack) == (true) {
   39         -
            return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
   40         -
                "Invalid Configuration: Dualstack and custom endpoint are not supported".to_string(),
   41         -
            ));
   42         -
        }
   43         -
        return Ok(::aws_smithy_types::endpoint::Endpoint::builder().url(endpoint.to_owned()).build());
   44         -
    }
   45         -
    #[allow(unused_variables)]
   46         -
    if let Some(region) = region {
   47         -
        #[allow(unused_variables)]
   48         -
        if let Some(partition_result) = partition_resolver.resolve_partition(region.as_ref() as &str, _diagnostic_collector) {
   49         -
            if (region.as_ref() as &str) == ("local") {
   50         -
                if (*use_fips) == (true) {
   51         -
                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
   52         -
                        "Invalid Configuration: FIPS and local endpoint are not supported".to_string(),
   53         -
                    ));
   54         -
                }
   55         -
                if (*use_dual_stack) == (true) {
   56         -
                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
   57         -
                        "Invalid Configuration: Dualstack and local endpoint are not supported".to_string(),
   58         -
                    ));
   59         -
                }
   60         -
                return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
   61         -
                    .url("http://localhost:8000".to_string())
   62         -
                    .property(
   63         -
                        "authSchemes",
   64         -
                        vec![::aws_smithy_types::Document::from({
   65         -
                            let mut out = ::std::collections::HashMap::<String, ::aws_smithy_types::Document>::with_capacity(3);
   66         -
                            out.insert("name".to_string(), "sigv4".to_string().into());
   67         -
                            out.insert("signingName".to_string(), "dynamodb".to_string().into());
   68         -
                            out.insert("signingRegion".to_string(), "us-east-1".to_string().into());
   69         -
                            out
   70         -
                        })],
   71         -
                    )
   72         -
                    .build());
   73         -
            }
   74         -
            if (*use_fips) == (true) {
   75         -
                if (*use_dual_stack) == (true) {
   76         -
                    if (partition_result.supports_fips()) == (true) {
   77         -
                        if (partition_result.supports_dual_stack()) == (true) {
   78         -
                            #[allow(unused_variables)]
   79         -
                            if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
   80         -
                                if (account_id_endpoint_mode.as_ref() as &str) == ("required") {
   81         -
                                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
   82         -
.to_string()));
   83         -
                                }
   84         -
                            }
   85         -
                            return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
   86         -
                                .url({
   87         -
                                    let mut out = String::new();
   88         -
                                    out.push_str("https://dynamodb-fips.");
   89         -
                                    #[allow(clippy::needless_borrow)]
   90         -
                                    out.push_str(&region.as_ref() as &str);
   91         -
                                    out.push('.');
   92         -
                                    #[allow(clippy::needless_borrow)]
   93         -
                                    out.push_str(&partition_result.dual_stack_dns_suffix());
   94         -
                                    out
   95         -
                                })
   96         -
                                .build());
   97         -
                        }
   98         -
                    }
   99         -
                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  100         -
                        "FIPS and DualStack are enabled, but this partition does not support one or both".to_string(),
  101         -
                    ));
  102         -
                }
  103         -
            }
  104         -
            if (*use_fips) == (true) {
  105         -
                if (partition_result.supports_fips()) == (true) {
  106         -
                    if (partition_result.name()) == ("aws-us-gov") {
  107         -
                        #[allow(unused_variables)]
  108         -
                        if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  109         -
                            if (account_id_endpoint_mode.as_ref() as &str) == ("required") {
  110         -
                                return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
  111         -
.to_string()));
  112         -
                            }
  113         -
                        }
  114         -
                        return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  115         -
                            .url({
  116         -
                                let mut out = String::new();
  117         -
                                out.push_str("https://dynamodb.");
  118         -
                                #[allow(clippy::needless_borrow)]
  119         -
                                out.push_str(&region.as_ref() as &str);
  120         -
                                out.push('.');
  121         -
                                #[allow(clippy::needless_borrow)]
  122         -
                                out.push_str(&partition_result.dns_suffix());
  123         -
                                out
  124         -
                            })
  125         -
                            .build());
  126         -
                    }
  127         -
                    #[allow(unused_variables)]
  128         -
                    if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  129         -
                        if (account_id_endpoint_mode.as_ref() as &str) == ("required") {
  130         -
                            return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
  131         -
.to_string()));
  132         -
                        }
  133         -
                    }
  134         -
                    return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  135         -
                        .url({
  136         -
                            let mut out = String::new();
  137         -
                            out.push_str("https://dynamodb-fips.");
  138         -
                            #[allow(clippy::needless_borrow)]
  139         -
                            out.push_str(&region.as_ref() as &str);
  140         -
                            out.push('.');
  141         -
                            #[allow(clippy::needless_borrow)]
  142         -
                            out.push_str(&partition_result.dns_suffix());
  143         -
                            out
  144         -
                        })
  145         -
                        .build());
  146         -
                }
  147         -
                return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  148         -
                    "FIPS is enabled but this partition does not support FIPS".to_string(),
  149         -
                ));
  150         -
            }
  151         -
            if (*use_dual_stack) == (true) {
  152         -
                if (partition_result.supports_dual_stack()) == (true) {
  153         -
                    #[allow(unused_variables)]
  154         -
                    if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  155         -
                        if (account_id_endpoint_mode.as_ref() as &str) == ("required") {
  156         -
                            if !((*use_fips) == (true)) {
  157         -
                                return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and DualStack is enabled, but DualStack account endpoints are not supported"
  158         -
.to_string()));
  159         -
                            }
  160         -
                            return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
  161         -
.to_string()));
  162         -
                        }
  163         -
                    }
  164         -
                    return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  165         -
                        .url({
  166         -
                            let mut out = String::new();
  167         -
                            out.push_str("https://dynamodb.");
  168         -
                            #[allow(clippy::needless_borrow)]
  169         -
                            out.push_str(&region.as_ref() as &str);
  170         -
                            out.push('.');
  171         -
                            #[allow(clippy::needless_borrow)]
  172         -
                            out.push_str(&partition_result.dual_stack_dns_suffix());
  173         -
                            out
  174         -
                        })
  175         -
                        .build());
  176         -
                }
  177         -
                return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  178         -
                    "DualStack is enabled but this partition does not support DualStack".to_string(),
  179         -
                ));
  180         -
            }
  181         -
            #[allow(unused_variables)]
  182         -
            if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  183         -
                if !((account_id_endpoint_mode.as_ref() as &str) == ("disabled")) {
  184         -
                    if (partition_result.name()) == ("aws") {
  185         -
                        if !((*use_fips) == (true)) {
  186         -
                            if !((*use_dual_stack) == (true)) {
  187         -
                                #[allow(unused_variables)]
  188         -
                                if let Some(resource_arn) = resource_arn {
  189         -
                                    #[allow(unused_variables)]
  190         -
                                    if let Some(parsed_arn) =
  191         -
                                        crate::endpoint_lib::arn::parse_arn(resource_arn.as_ref() as &str, _diagnostic_collector)
  192         -
                                    {
  193         -
                                        if (parsed_arn.service()) == ("dynamodb") {
  194         -
                                            if crate::endpoint_lib::host::is_valid_host_label(parsed_arn.region(), false, _diagnostic_collector) {
  195         -
                                                if (parsed_arn.region()) == (region.as_ref() as &str) {
  196         -
                                                    if crate::endpoint_lib::host::is_valid_host_label(
  197         -
                                                        parsed_arn.account_id(),
  198         -
                                                        false,
  199         -
                                                        _diagnostic_collector,
  200         -
                                                    ) {
  201         -
                                                        return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  202         -
                                                            .url({
  203         -
                                                                let mut out = String::new();
  204         -
                                                                out.push_str("https://");
  205         -
                                                                #[allow(clippy::needless_borrow)]
  206         -
                                                                out.push_str(&parsed_arn.account_id());
  207         -
                                                                out.push_str(".ddb.");
  208         -
                                                                #[allow(clippy::needless_borrow)]
  209         -
                                                                out.push_str(&region.as_ref() as &str);
  210         -
                                                                out.push('.');
  211         -
                                                                #[allow(clippy::needless_borrow)]
  212         -
                                                                out.push_str(&partition_result.dns_suffix());
  213         -
                                                                out
  214         -
                                                            })
  215         -
                                                            .build());
  216         -
                                                    }
  217         -
                                                }
  218         -
                                            }
  219         -
                                        }
  220         -
                                    }
  221         -
                                }
  222         -
                            }
  223         -
                        }
  224         -
                    }
  225         -
                }
  226         -
            }
  227         -
            #[allow(unused_variables)]
  228         -
            if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  229         -
                if !((account_id_endpoint_mode.as_ref() as &str) == ("disabled")) {
  230         -
                    if (partition_result.name()) == ("aws") {
  231         -
                        if !((*use_fips) == (true)) {
  232         -
                            if !((*use_dual_stack) == (true)) {
  233         -
                                #[allow(unused_variables)]
  234         -
                                if let Some(resource_arn_list) = resource_arn_list {
  235         -
                                    #[allow(unused_variables)]
  236         -
                                    if let Some(first_arn) = resource_arn_list.first().cloned() {
  237         -
                                        #[allow(unused_variables)]
  238         -
                                        if let Some(parsed_arn) =
  239         -
                                            crate::endpoint_lib::arn::parse_arn(first_arn.as_ref() as &str, _diagnostic_collector)
  240         -
                                        {
  241         -
                                            if (parsed_arn.service()) == ("dynamodb") {
  242         -
                                                if crate::endpoint_lib::host::is_valid_host_label(parsed_arn.region(), false, _diagnostic_collector) {
  243         -
                                                    if (parsed_arn.region()) == (region.as_ref() as &str) {
  244         -
                                                        if crate::endpoint_lib::host::is_valid_host_label(
  245         -
                                                            parsed_arn.account_id(),
  246         -
                                                            false,
  247         -
                                                            _diagnostic_collector,
  248         -
                                                        ) {
  249         -
                                                            return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  250         -
                                                                .url({
  251         -
                                                                    let mut out = String::new();
  252         -
                                                                    out.push_str("https://");
  253         -
                                                                    #[allow(clippy::needless_borrow)]
  254         -
                                                                    out.push_str(&parsed_arn.account_id());
  255         -
                                                                    out.push_str(".ddb.");
  256         -
                                                                    #[allow(clippy::needless_borrow)]
  257         -
                                                                    out.push_str(&region.as_ref() as &str);
  258         -
                                                                    out.push('.');
  259         -
                                                                    #[allow(clippy::needless_borrow)]
  260         -
                                                                    out.push_str(&partition_result.dns_suffix());
  261         -
                                                                    out
  262         -
                                                                })
  263         -
                                                                .build());
  264         -
                                                        }
  265         -
                                                    }
  266         -
                                                }
  267         -
                                            }
  268         -
                                        }
  269         -
                                    }
  270         -
                                }
  271         -
                            }
  272         -
                        }
  273         -
                    }
  274         -
                }
  275         -
            }
  276         -
            #[allow(unused_variables)]
  277         -
            if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  278         -
                if !((account_id_endpoint_mode.as_ref() as &str) == ("disabled")) {
  279         -
                    if (partition_result.name()) == ("aws") {
  280         -
                        if !((*use_fips) == (true)) {
  281         -
                            if !((*use_dual_stack) == (true)) {
  282         -
                                #[allow(unused_variables)]
  283         -
                                if let Some(account_id) = account_id {
  284         -
                                    if crate::endpoint_lib::host::is_valid_host_label(account_id.as_ref() as &str, false, _diagnostic_collector) {
  285         -
                                        return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  286         -
                                            .url({
  287         -
                                                let mut out = String::new();
  288         -
                                                out.push_str("https://");
  289         -
                                                #[allow(clippy::needless_borrow)]
  290         -
                                                out.push_str(&account_id.as_ref() as &str);
  291         -
                                                out.push_str(".ddb.");
  292         -
                                                #[allow(clippy::needless_borrow)]
  293         -
                                                out.push_str(&region.as_ref() as &str);
  294         -
                                                out.push('.');
  295         -
                                                #[allow(clippy::needless_borrow)]
  296         -
                                                out.push_str(&partition_result.dns_suffix());
  297         -
                                                out
  298         -
                                            })
  299         -
                                            .build());
  300         -
                                    }
  301         -
                                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  302         -
                                        "Credentials-sourced account ID parameter is invalid".to_string(),
  303         -
                                    ));
  304         -
                                }
  305         -
                            }
  306         -
                        }
  307         -
                    }
  308         -
                }
  309         -
            }
  310         -
            #[allow(unused_variables)]
  311         -
            if let Some(account_id_endpoint_mode) = account_id_endpoint_mode {
  312         -
                if (account_id_endpoint_mode.as_ref() as &str) == ("required") {
  313         -
                    if !((*use_fips) == (true)) {
  314         -
                        if !((*use_dual_stack) == (true)) {
  315         -
                            if (partition_result.name()) == ("aws") {
  316         -
                                return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  317         -
                                    "AccountIdEndpointMode is required but no AccountID was provided or able to be loaded".to_string(),
  318         -
                                ));
  319         -
                            }
  320         -
                            return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  321         -
                                "Invalid Configuration: AccountIdEndpointMode is required but account endpoints are not supported in this partition"
  322         -
                                    .to_string(),
  323         -
                            ));
  324         -
                        }
  325         -
                        return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message("Invalid Configuration: AccountIdEndpointMode is required and DualStack is enabled, but DualStack account endpoints are not supported"
  326         -
.to_string()));
  327         -
                    }
  328         -
                    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  329         -
                        "Invalid Configuration: AccountIdEndpointMode is required and FIPS is enabled, but FIPS account endpoints are not supported"
  330         -
                            .to_string(),
  331         -
                    ));
  332         -
                }
  333         -
            }
  334         -
            return Ok(::aws_smithy_types::endpoint::Endpoint::builder()
  335         -
                .url({
  336         -
                    let mut out = String::new();
  337         -
                    out.push_str("https://dynamodb.");
  338         -
                    #[allow(clippy::needless_borrow)]
  339         -
                    out.push_str(&region.as_ref() as &str);
  340         -
                    out.push('.');
  341         -
                    #[allow(clippy::needless_borrow)]
  342         -
                    out.push_str(&partition_result.dns_suffix());
  343         -
                    out
  344         -
                })
  345         -
                .build());
  346         -
        }
  347         -
        #[allow(unreachable_code)]
  348         -
        return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(format!(
  349         -
            "No rules matched these parameters. This is a bug. {_params:?}"
  350         -
        )));
  351         -
    }
  352         -
    return Err(::aws_smithy_http::endpoint::ResolveEndpointError::message(
  353         -
        "Invalid Configuration: Missing Region".to_string(),
  354         -
    ));
  355         -
}

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

@@ -1,1 +0,26 @@
    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 diagnostic;
   23     23   
   24     24   
pub(crate) mod host;
          25  +
          26  +
pub(crate) mod partition;

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

@@ -0,1 +0,75 @@
           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  +
//TODO(bdd): Should this just be an [i32; 3]? Might make it easier to make things const?
           8  +
/// Binary Decision Diagram node representation
           9  +
#[derive(Debug, Clone, Copy)]
          10  +
pub(crate) struct BddNode {
          11  +
    pub condition_index: i32,
          12  +
    pub high_ref: i32,
          13  +
    pub low_ref: i32,
          14  +
}
          15  +
          16  +
#[allow(dead_code)]
          17  +
const RESULT_LIMIT: i32 = 100_000_000;
          18  +
#[allow(dead_code)]
          19  +
const TERMINAL_TRUE: i32 = 1;
          20  +
#[allow(dead_code)]
          21  +
const TERMINAL_FALSE: i32 = -1;
          22  +
          23  +
/// Evaluates a BDD to resolve an endpoint result
          24  +
///
          25  +
/// Arguments
          26  +
/// * `nodes` - Array of BddNodes
          27  +
/// * `conditions` - Array of conditions referenced by nodes
          28  +
/// * `root_ref` - Root reference to start evaluation
          29  +
/// * `params` - Parameters for condition evaluation
          30  +
/// * `context` - Values that can be set/mutated by the conditions
          31  +
/// * `diagnostic_collector` - a struct for collecting information about the execution of conditions
          32  +
/// * `condition_evaluator` - Function to evaluate individual conditions with params and context
          33  +
/// * `result_builder` - Function to construct the endpoint result from a result index
          34  +
///
          35  +
/// Returns
          36  +
/// * `Some(R)` - Result if evaluation succeeds
          37  +
/// * `None` - No match found
          38  +
#[allow(clippy::too_many_arguments, dead_code)]
          39  +
pub(crate) fn evaluate_bdd<'a, Cond, Params, R, Context>(
          40  +
    nodes: &[BddNode],
          41  +
    conditions: &[Cond],
          42  +
    root_ref: i32,
          43  +
    params: &'a Params,
          44  +
    context: &mut Context,
          45  +
    diagnostic_collector: &mut crate::endpoint_lib::diagnostic::DiagnosticCollector,
          46  +
    mut condition_evaluator: impl FnMut(&Cond, &'a Params, &mut Context, &mut crate::endpoint_lib::diagnostic::DiagnosticCollector) -> bool,
          47  +
    result_builder: impl FnOnce(usize, &'a Params, &Context) -> R,
          48  +
) -> Option<R> {
          49  +
    let mut current_ref = root_ref;
          50  +
          51  +
    loop {
          52  +
        match current_ref {
          53  +
            // Result references (>= 100_000_000)
          54  +
            ref_val if ref_val >= RESULT_LIMIT => {
          55  +
                let result_index = (ref_val - RESULT_LIMIT) as usize;
          56  +
                return Some(result_builder(result_index, params, context));
          57  +
            }
          58  +
            // Terminals (1 = TRUE, -1 = FALSE) NoMatchRule
          59  +
            TERMINAL_TRUE | TERMINAL_FALSE => {
          60  +
                return Some(result_builder(0, params, context));
          61  +
            }
          62  +
            // Node references
          63  +
            ref_val => {
          64  +
                let is_complement = ref_val < 0;
          65  +
                let node_index = (ref_val.abs() - 1) as usize;
          66  +
                let node = nodes.get(node_index)?;
          67  +
                let condition_index = node.condition_index as usize;
          68  +
                let condition = conditions.get(condition_index)?;
          69  +
                let condition_result = condition_evaluator(condition, params, context, diagnostic_collector);
          70  +
                // Handle complement edges: complement inverts the branch selection
          71  +
                current_ref = if is_complement ^ condition_result { node.high_ref } else { node.low_ref };
          72  +
            }
          73  +
        }
          74  +
    }
          75  +
}

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

@@ -85,85 +145,145 @@
  105    105   
    /// <ul>
  106    106   
    /// <li>
  107    107   
    /// <p>There is an ongoing <code>TransactGetItems</code> operation that conflicts with a concurrent <code>PutItem</code>, <code>UpdateItem</code>, <code>DeleteItem</code> or <code>TransactWriteItems</code> request. In this case the <code>TransactGetItems</code> operation fails with a <code>TransactionCanceledException</code>.</p></li>
  108    108   
    /// <li>
  109    109   
    /// <p>A table in the <code>TransactGetItems</code> request is in a different account or region.</p></li>
  110    110   
    /// <li>
  111    111   
    /// <p>There is insufficient provisioned capacity for the transaction to be completed.</p></li>
  112    112   
    /// <li>
  113    113   
    /// <p>There is a user error, such as an invalid data format.</p></li>
  114    114   
    /// </ul><note>
  115         -
    /// <p>If using Java, DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. This property is not set for other languages. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
         115  +
    /// <p>DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
  116    116   
    /// </note>
  117    117   
    /// <p>Cancellation reason codes and possible error messages:</p>
  118    118   
    /// <ul>
  119    119   
    /// <li>
  120    120   
    /// <p>No Errors:</p>
  121    121   
    /// <ul>
  122    122   
    /// <li>
  123    123   
    /// <p>Code: <code>None</code></p></li>
  124    124   
    /// <li>
  125    125   
    /// <p>Message: <code>null</code></p></li>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/create_table/_create_table_input.rs

@@ -34,34 +94,94 @@
   54     54   
    /// <p><code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p></li>
   55     55   
    /// </ul></li>
   56     56   
    /// </ul>
   57     57   
    pub local_secondary_indexes: ::std::option::Option<::std::vec::Vec<crate::types::LocalSecondaryIndex>>,
   58     58   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
   59     59   
    /// <ul>
   60     60   
    /// <li>
   61     61   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
   62     62   
    /// <p></p></li>
   63     63   
    /// <li>
   64         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
          64  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
   65     65   
    /// <li>
   66     66   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
   67     67   
    /// <ul>
   68     68   
    /// <li>
   69     69   
    /// <p><code>ProjectionType</code> - One of the following:</p>
   70     70   
    /// <ul>
   71     71   
    /// <li>
   72     72   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
   73     73   
    /// <li>
   74     74   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
@@ -103,103 +162,166 @@
  123    123   
    /// <p>Represents the warm throughput (in read units per second and write units per second) for creating a table.</p>
  124    124   
    pub warm_throughput: ::std::option::Option<crate::types::WarmThroughput>,
  125    125   
    /// <p>An Amazon Web Services resource-based policy document in JSON format that will be attached to the table.</p>
  126    126   
    /// <p>When you attach a resource-based policy while creating a table, the policy application is <i>strongly consistent</i>.</p>
  127    127   
    /// <p>The maximum size supported for a resource-based policy document is 20 KB. DynamoDB counts whitespaces when calculating the size of a policy against this limit. For a full list of all considerations that apply for resource-based policies, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html">Resource-based policy considerations</a>.</p><note>
  128    128   
    /// <p>You need to specify the <code>CreateTable</code> and <code>PutResourcePolicy</code> IAM actions for authorizing a user to create a table with a resource-based policy.</p>
  129    129   
    /// </note>
  130    130   
    pub resource_policy: ::std::option::Option<::std::string::String>,
  131    131   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  132    132   
    pub on_demand_throughput: ::std::option::Option<crate::types::OnDemandThroughput>,
         133  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         134  +
    pub global_table_source_arn: ::std::option::Option<::std::string::String>,
         135  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         136  +
    pub global_table_settings_replication_mode: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
  133    137   
}
  134    138   
impl CreateTableInput {
  135    139   
    /// <p>An array of attributes that describe the key schema for the table and indexes.</p>
  136    140   
    ///
  137    141   
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.attribute_definitions.is_none()`.
  138    142   
    pub fn attribute_definitions(&self) -> &[crate::types::AttributeDefinition] {
  139    143   
        self.attribute_definitions.as_deref().unwrap_or_default()
  140    144   
    }
  141    145   
    /// <p>The name of the table to create. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>
  142    146   
    pub fn table_name(&self) -> ::std::option::Option<&str> {
@@ -176,180 +236,240 @@
  196    200   
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.local_secondary_indexes.is_none()`.
  197    201   
    pub fn local_secondary_indexes(&self) -> &[crate::types::LocalSecondaryIndex] {
  198    202   
        self.local_secondary_indexes.as_deref().unwrap_or_default()
  199    203   
    }
  200    204   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  201    205   
    /// <ul>
  202    206   
    /// <li>
  203    207   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  204    208   
    /// <p></p></li>
  205    209   
    /// <li>
  206         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         210  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  207    211   
    /// <li>
  208    212   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  209    213   
    /// <ul>
  210    214   
    /// <li>
  211    215   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  212    216   
    /// <ul>
  213    217   
    /// <li>
  214    218   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  215    219   
    /// <li>
  216    220   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
@@ -271,275 +357,371 @@
  291    295   
    /// <p>The maximum size supported for a resource-based policy document is 20 KB. DynamoDB counts whitespaces when calculating the size of a policy against this limit. For a full list of all considerations that apply for resource-based policies, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-considerations.html">Resource-based policy considerations</a>.</p><note>
  292    296   
    /// <p>You need to specify the <code>CreateTable</code> and <code>PutResourcePolicy</code> IAM actions for authorizing a user to create a table with a resource-based policy.</p>
  293    297   
    /// </note>
  294    298   
    pub fn resource_policy(&self) -> ::std::option::Option<&str> {
  295    299   
        self.resource_policy.as_deref()
  296    300   
    }
  297    301   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  298    302   
    pub fn on_demand_throughput(&self) -> ::std::option::Option<&crate::types::OnDemandThroughput> {
  299    303   
        self.on_demand_throughput.as_ref()
  300    304   
    }
         305  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         306  +
    pub fn global_table_source_arn(&self) -> ::std::option::Option<&str> {
         307  +
        self.global_table_source_arn.as_deref()
         308  +
    }
         309  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         310  +
    pub fn global_table_settings_replication_mode(&self) -> ::std::option::Option<&crate::types::GlobalTableSettingsReplicationMode> {
         311  +
        self.global_table_settings_replication_mode.as_ref()
         312  +
    }
  301    313   
}
  302    314   
impl CreateTableInput {
  303    315   
    /// Creates a new builder-style object to manufacture [`CreateTableInput`](crate::operation::create_table::CreateTableInput).
  304    316   
    pub fn builder() -> crate::operation::create_table::builders::CreateTableInputBuilder {
  305    317   
        crate::operation::create_table::builders::CreateTableInputBuilder::default()
  306    318   
    }
  307    319   
}
  308    320   
  309    321   
/// A builder for [`CreateTableInput`](crate::operation::create_table::CreateTableInput).
  310    322   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
  311    323   
#[non_exhaustive]
  312    324   
pub struct CreateTableInputBuilder {
  313    325   
    pub(crate) attribute_definitions: ::std::option::Option<::std::vec::Vec<crate::types::AttributeDefinition>>,
  314    326   
    pub(crate) table_name: ::std::option::Option<::std::string::String>,
  315    327   
    pub(crate) key_schema: ::std::option::Option<::std::vec::Vec<crate::types::KeySchemaElement>>,
  316    328   
    pub(crate) local_secondary_indexes: ::std::option::Option<::std::vec::Vec<crate::types::LocalSecondaryIndex>>,
  317    329   
    pub(crate) global_secondary_indexes: ::std::option::Option<::std::vec::Vec<crate::types::GlobalSecondaryIndex>>,
  318    330   
    pub(crate) billing_mode: ::std::option::Option<crate::types::BillingMode>,
  319    331   
    pub(crate) provisioned_throughput: ::std::option::Option<crate::types::ProvisionedThroughput>,
  320    332   
    pub(crate) stream_specification: ::std::option::Option<crate::types::StreamSpecification>,
  321    333   
    pub(crate) sse_specification: ::std::option::Option<crate::types::SseSpecification>,
  322    334   
    pub(crate) tags: ::std::option::Option<::std::vec::Vec<crate::types::Tag>>,
  323    335   
    pub(crate) table_class: ::std::option::Option<crate::types::TableClass>,
  324    336   
    pub(crate) deletion_protection_enabled: ::std::option::Option<bool>,
  325    337   
    pub(crate) warm_throughput: ::std::option::Option<crate::types::WarmThroughput>,
  326    338   
    pub(crate) resource_policy: ::std::option::Option<::std::string::String>,
  327    339   
    pub(crate) on_demand_throughput: ::std::option::Option<crate::types::OnDemandThroughput>,
         340  +
    pub(crate) global_table_source_arn: ::std::option::Option<::std::string::String>,
         341  +
    pub(crate) global_table_settings_replication_mode: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
  328    342   
}
  329    343   
impl CreateTableInputBuilder {
  330    344   
    /// Appends an item to `attribute_definitions`.
  331    345   
    ///
  332    346   
    /// To override the contents of this collection use [`set_attribute_definitions`](Self::set_attribute_definitions).
  333    347   
    ///
  334    348   
    /// <p>An array of attributes that describe the key schema for the table and indexes.</p>
  335    349   
    pub fn attribute_definitions(mut self, input: crate::types::AttributeDefinition) -> Self {
  336    350   
        let mut v = self.attribute_definitions.unwrap_or_default();
  337    351   
        v.push(input);
@@ -514,528 +636,650 @@
  534    548   
    /// Appends an item to `global_secondary_indexes`.
  535    549   
    ///
  536    550   
    /// To override the contents of this collection use [`set_global_secondary_indexes`](Self::set_global_secondary_indexes).
  537    551   
    ///
  538    552   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  539    553   
    /// <ul>
  540    554   
    /// <li>
  541    555   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  542    556   
    /// <p></p></li>
  543    557   
    /// <li>
  544         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         558  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  545    559   
    /// <li>
  546    560   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  547    561   
    /// <ul>
  548    562   
    /// <li>
  549    563   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  550    564   
    /// <ul>
  551    565   
    /// <li>
  552    566   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  553    567   
    /// <li>
  554    568   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
  555    569   
    /// <li>
  556    570   
    /// <p><code>ALL</code> - All of the table attributes are projected into the index.</p></li>
  557    571   
    /// </ul></li>
  558    572   
    /// <li>
  559    573   
    /// <p><code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p></li>
  560    574   
    /// </ul></li>
  561    575   
    /// <li>
  562    576   
    /// <p><code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p></li>
  563    577   
    /// </ul>
  564    578   
    pub fn global_secondary_indexes(mut self, input: crate::types::GlobalSecondaryIndex) -> Self {
  565    579   
        let mut v = self.global_secondary_indexes.unwrap_or_default();
  566    580   
        v.push(input);
  567    581   
        self.global_secondary_indexes = ::std::option::Option::Some(v);
  568    582   
        self
  569    583   
    }
  570    584   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  571    585   
    /// <ul>
  572    586   
    /// <li>
  573    587   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  574    588   
    /// <p></p></li>
  575    589   
    /// <li>
  576         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         590  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  577    591   
    /// <li>
  578    592   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  579    593   
    /// <ul>
  580    594   
    /// <li>
  581    595   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  582    596   
    /// <ul>
  583    597   
    /// <li>
  584    598   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  585    599   
    /// <li>
  586    600   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
  587    601   
    /// <li>
  588    602   
    /// <p><code>ALL</code> - All of the table attributes are projected into the index.</p></li>
  589    603   
    /// </ul></li>
  590    604   
    /// <li>
  591    605   
    /// <p><code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p></li>
  592    606   
    /// </ul></li>
  593    607   
    /// <li>
  594    608   
    /// <p><code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p></li>
  595    609   
    /// </ul>
  596    610   
    pub fn set_global_secondary_indexes(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::GlobalSecondaryIndex>>) -> Self {
  597    611   
        self.global_secondary_indexes = input;
  598    612   
        self
  599    613   
    }
  600    614   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  601    615   
    /// <ul>
  602    616   
    /// <li>
  603    617   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  604    618   
    /// <p></p></li>
  605    619   
    /// <li>
  606         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         620  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  607    621   
    /// <li>
  608    622   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  609    623   
    /// <ul>
  610    624   
    /// <li>
  611    625   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  612    626   
    /// <ul>
  613    627   
    /// <li>
  614    628   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  615    629   
    /// <li>
  616    630   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
@@ -829,843 +879,926 @@
  849    863   
    }
  850    864   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  851    865   
    pub fn set_on_demand_throughput(mut self, input: ::std::option::Option<crate::types::OnDemandThroughput>) -> Self {
  852    866   
        self.on_demand_throughput = input;
  853    867   
        self
  854    868   
    }
  855    869   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  856    870   
    pub fn get_on_demand_throughput(&self) -> &::std::option::Option<crate::types::OnDemandThroughput> {
  857    871   
        &self.on_demand_throughput
  858    872   
    }
         873  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         874  +
    pub fn global_table_source_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
         875  +
        self.global_table_source_arn = ::std::option::Option::Some(input.into());
         876  +
        self
         877  +
    }
         878  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         879  +
    pub fn set_global_table_source_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
         880  +
        self.global_table_source_arn = input;
         881  +
        self
         882  +
    }
         883  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         884  +
    pub fn get_global_table_source_arn(&self) -> &::std::option::Option<::std::string::String> {
         885  +
        &self.global_table_source_arn
         886  +
    }
         887  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         888  +
    pub fn global_table_settings_replication_mode(mut self, input: crate::types::GlobalTableSettingsReplicationMode) -> Self {
         889  +
        self.global_table_settings_replication_mode = ::std::option::Option::Some(input);
         890  +
        self
         891  +
    }
         892  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         893  +
    pub fn set_global_table_settings_replication_mode(
         894  +
        mut self,
         895  +
        input: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
         896  +
    ) -> Self {
         897  +
        self.global_table_settings_replication_mode = input;
         898  +
        self
         899  +
    }
         900  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         901  +
    pub fn get_global_table_settings_replication_mode(&self) -> &::std::option::Option<crate::types::GlobalTableSettingsReplicationMode> {
         902  +
        &self.global_table_settings_replication_mode
         903  +
    }
  859    904   
    /// Consumes the builder and constructs a [`CreateTableInput`](crate::operation::create_table::CreateTableInput).
  860    905   
    pub fn build(self) -> ::std::result::Result<crate::operation::create_table::CreateTableInput, ::aws_smithy_types::error::operation::BuildError> {
  861    906   
        ::std::result::Result::Ok(crate::operation::create_table::CreateTableInput {
  862    907   
            attribute_definitions: self.attribute_definitions,
  863    908   
            table_name: self.table_name,
  864    909   
            key_schema: self.key_schema,
  865    910   
            local_secondary_indexes: self.local_secondary_indexes,
  866    911   
            global_secondary_indexes: self.global_secondary_indexes,
  867    912   
            billing_mode: self.billing_mode,
  868    913   
            provisioned_throughput: self.provisioned_throughput,
  869    914   
            stream_specification: self.stream_specification,
  870    915   
            sse_specification: self.sse_specification,
  871    916   
            tags: self.tags,
  872    917   
            table_class: self.table_class,
  873    918   
            deletion_protection_enabled: self.deletion_protection_enabled,
  874    919   
            warm_throughput: self.warm_throughput,
  875    920   
            resource_policy: self.resource_policy,
  876    921   
            on_demand_throughput: self.on_demand_throughput,
         922  +
            global_table_source_arn: self.global_table_source_arn,
         923  +
            global_table_settings_replication_mode: self.global_table_settings_replication_mode,
  877    924   
        })
  878    925   
    }
  879    926   
}

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/create_table/builders.rs

@@ -295,295 +415,415 @@
  315    315   
    /// Appends an item to `GlobalSecondaryIndexes`.
  316    316   
    ///
  317    317   
    /// To override the contents of this collection use [`set_global_secondary_indexes`](Self::set_global_secondary_indexes).
  318    318   
    ///
  319    319   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  320    320   
    /// <ul>
  321    321   
    /// <li>
  322    322   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  323    323   
    /// <p></p></li>
  324    324   
    /// <li>
  325         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         325  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  326    326   
    /// <li>
  327    327   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  328    328   
    /// <ul>
  329    329   
    /// <li>
  330    330   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  331    331   
    /// <ul>
  332    332   
    /// <li>
  333    333   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  334    334   
    /// <li>
  335    335   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
  336    336   
    /// <li>
  337    337   
    /// <p><code>ALL</code> - All of the table attributes are projected into the index.</p></li>
  338    338   
    /// </ul></li>
  339    339   
    /// <li>
  340    340   
    /// <p><code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p></li>
  341    341   
    /// </ul></li>
  342    342   
    /// <li>
  343    343   
    /// <p><code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p></li>
  344    344   
    /// </ul>
  345    345   
    pub fn global_secondary_indexes(mut self, input: crate::types::GlobalSecondaryIndex) -> Self {
  346    346   
        self.inner = self.inner.global_secondary_indexes(input);
  347    347   
        self
  348    348   
    }
  349    349   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  350    350   
    /// <ul>
  351    351   
    /// <li>
  352    352   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  353    353   
    /// <p></p></li>
  354    354   
    /// <li>
  355         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         355  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  356    356   
    /// <li>
  357    357   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  358    358   
    /// <ul>
  359    359   
    /// <li>
  360    360   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  361    361   
    /// <ul>
  362    362   
    /// <li>
  363    363   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  364    364   
    /// <li>
  365    365   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
  366    366   
    /// <li>
  367    367   
    /// <p><code>ALL</code> - All of the table attributes are projected into the index.</p></li>
  368    368   
    /// </ul></li>
  369    369   
    /// <li>
  370    370   
    /// <p><code>NonKeyAttributes</code> - A list of one or more non-key attribute names that are projected into the secondary index. The total count of attributes provided in <code>NonKeyAttributes</code>, summed across all of the secondary indexes, must not exceed 100. If you project the same attribute into two different indexes, this counts as two distinct attributes when determining the total. This limit only applies when you specify the ProjectionType of <code>INCLUDE</code>. You still can specify the ProjectionType of <code>ALL</code> to project all attributes from the source table, even if the table has more than 100 attributes.</p></li>
  371    371   
    /// </ul></li>
  372    372   
    /// <li>
  373    373   
    /// <p><code>ProvisionedThroughput</code> - The provisioned throughput settings for the global secondary index, consisting of read and write capacity units.</p></li>
  374    374   
    /// </ul>
  375    375   
    pub fn set_global_secondary_indexes(mut self, input: ::std::option::Option<::std::vec::Vec<crate::types::GlobalSecondaryIndex>>) -> Self {
  376    376   
        self.inner = self.inner.set_global_secondary_indexes(input);
  377    377   
        self
  378    378   
    }
  379    379   
    /// <p>One or more global secondary indexes (the maximum is 20) to be created on the table. Each global secondary index in the array includes the following:</p>
  380    380   
    /// <ul>
  381    381   
    /// <li>
  382    382   
    /// <p><code>IndexName</code> - The name of the global secondary index. Must be unique only for this table.</p>
  383    383   
    /// <p></p></li>
  384    384   
    /// <li>
  385         -
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index.</p></li>
         385  +
    /// <p><code>KeySchema</code> - Specifies the key schema for the global secondary index. Each global secondary index supports up to 4 partition keys and up to 4 sort keys.</p></li>
  386    386   
    /// <li>
  387    387   
    /// <p><code>Projection</code> - Specifies attributes that are copied (projected) from the table into the index. These are in addition to the primary key attributes and index key attributes, which are automatically projected. Each attribute specification is composed of:</p>
  388    388   
    /// <ul>
  389    389   
    /// <li>
  390    390   
    /// <p><code>ProjectionType</code> - One of the following:</p>
  391    391   
    /// <ul>
  392    392   
    /// <li>
  393    393   
    /// <p><code>KEYS_ONLY</code> - Only the index and primary keys are projected into the index.</p></li>
  394    394   
    /// <li>
  395    395   
    /// <p><code>INCLUDE</code> - Only the specified table attributes are projected into the index. The list of projected attributes is in <code>NonKeyAttributes</code>.</p></li>
@@ -607,607 +637,668 @@
  627    627   
    }
  628    628   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  629    629   
    pub fn set_on_demand_throughput(mut self, input: ::std::option::Option<crate::types::OnDemandThroughput>) -> Self {
  630    630   
        self.inner = self.inner.set_on_demand_throughput(input);
  631    631   
        self
  632    632   
    }
  633    633   
    /// <p>Sets the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  634    634   
    pub fn get_on_demand_throughput(&self) -> &::std::option::Option<crate::types::OnDemandThroughput> {
  635    635   
        self.inner.get_on_demand_throughput()
  636    636   
    }
         637  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         638  +
    pub fn global_table_source_arn(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
         639  +
        self.inner = self.inner.global_table_source_arn(input.into());
         640  +
        self
         641  +
    }
         642  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         643  +
    pub fn set_global_table_source_arn(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
         644  +
        self.inner = self.inner.set_global_table_source_arn(input);
         645  +
        self
         646  +
    }
         647  +
    /// <p>The Amazon Resource Name (ARN) of the source table used for the creation of a multi-account global table.</p>
         648  +
    pub fn get_global_table_source_arn(&self) -> &::std::option::Option<::std::string::String> {
         649  +
        self.inner.get_global_table_source_arn()
         650  +
    }
         651  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         652  +
    pub fn global_table_settings_replication_mode(mut self, input: crate::types::GlobalTableSettingsReplicationMode) -> Self {
         653  +
        self.inner = self.inner.global_table_settings_replication_mode(input);
         654  +
        self
         655  +
    }
         656  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         657  +
    pub fn set_global_table_settings_replication_mode(
         658  +
        mut self,
         659  +
        input: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
         660  +
    ) -> Self {
         661  +
        self.inner = self.inner.set_global_table_settings_replication_mode(input);
         662  +
        self
         663  +
    }
         664  +
    /// <p>Controls the settings synchronization mode for the global table. For multi-account global tables, this parameter is required and the only supported value is ENABLED. For same-account global tables, this parameter is set to ENABLED_WITH_OVERRIDES.</p>
         665  +
    pub fn get_global_table_settings_replication_mode(&self) -> &::std::option::Option<crate::types::GlobalTableSettingsReplicationMode> {
         666  +
        self.inner.get_global_table_settings_replication_mode()
         667  +
    }
  637    668   
}

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/execute_transaction.rs

@@ -292,292 +352,352 @@
  312    312   
    /// <ul>
  313    313   
    /// <li>
  314    314   
    /// <p>There is an ongoing <code>TransactGetItems</code> operation that conflicts with a concurrent <code>PutItem</code>, <code>UpdateItem</code>, <code>DeleteItem</code> or <code>TransactWriteItems</code> request. In this case the <code>TransactGetItems</code> operation fails with a <code>TransactionCanceledException</code>.</p></li>
  315    315   
    /// <li>
  316    316   
    /// <p>A table in the <code>TransactGetItems</code> request is in a different account or region.</p></li>
  317    317   
    /// <li>
  318    318   
    /// <p>There is insufficient provisioned capacity for the transaction to be completed.</p></li>
  319    319   
    /// <li>
  320    320   
    /// <p>There is a user error, such as an invalid data format.</p></li>
  321    321   
    /// </ul><note>
  322         -
    /// <p>If using Java, DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. This property is not set for other languages. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
         322  +
    /// <p>DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
  323    323   
    /// </note>
  324    324   
    /// <p>Cancellation reason codes and possible error messages:</p>
  325    325   
    /// <ul>
  326    326   
    /// <li>
  327    327   
    /// <p>No Errors:</p>
  328    328   
    /// <ul>
  329    329   
    /// <li>
  330    330   
    /// <p>Code: <code>None</code></p></li>
  331    331   
    /// <li>
  332    332   
    /// <p>Message: <code>null</code></p></li>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/export_table_to_point_in_time/_export_table_to_point_in_time_input.rs

@@ -1,1 +80,80 @@
    2      2   
#[allow(missing_docs)] // documentation missing in model
    3      3   
#[non_exhaustive]
    4      4   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::fmt::Debug)]
    5      5   
pub struct ExportTableToPointInTimeInput {
    6      6   
    /// <p>The Amazon Resource Name (ARN) associated with the table to export.</p>
    7      7   
    pub table_arn: ::std::option::Option<::std::string::String>,
    8      8   
    /// <p>Time in the past from which to export table data, counted in seconds from the start of the Unix epoch. The table export will be a snapshot of the table's state at this point in time.</p>
    9      9   
    pub export_time: ::std::option::Option<::aws_smithy_types::DateTime>,
   10     10   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
   11     11   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
   12         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
          12  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
   13     13   
    pub client_token: ::std::option::Option<::std::string::String>,
   14     14   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>
   15     15   
    pub s3_bucket: ::std::option::Option<::std::string::String>,
   16     16   
    /// <p>The ID of the Amazon Web Services account that owns the bucket the export will be stored in.</p><note>
   17     17   
    /// <p>S3BucketOwner is a required parameter when exporting to a S3 bucket in another account.</p>
   18     18   
    /// </note>
   19     19   
    pub s3_bucket_owner: ::std::option::Option<::std::string::String>,
   20     20   
    /// <p>The Amazon S3 bucket prefix to use as the file name and path of the exported snapshot.</p>
   21     21   
    pub s3_prefix: ::std::option::Option<::std::string::String>,
   22     22   
    /// <p>Type of encryption used on the bucket where export data will be stored. Valid values for <code>S3SseAlgorithm</code> are:</p>
   23     23   
    /// <ul>
   24     24   
    /// <li>
   25     25   
    /// <p><code>AES256</code> - server-side encryption with Amazon S3 managed keys</p></li>
   26     26   
    /// <li>
   27     27   
    /// <p><code>KMS</code> - server-side encryption with KMS managed keys</p></li>
   28     28   
    /// </ul>
   29     29   
    pub s3_sse_algorithm: ::std::option::Option<crate::types::S3SseAlgorithm>,
   30     30   
    /// <p>The ID of the KMS managed key used to encrypt the S3 bucket where export data will be stored (if applicable).</p>
   31     31   
    pub s3_sse_kms_key_id: ::std::option::Option<::std::string::String>,
   32     32   
    /// <p>The format for the exported data. Valid values for <code>ExportFormat</code> are <code>DYNAMODB_JSON</code> or <code>ION</code>.</p>
   33     33   
    pub export_format: ::std::option::Option<crate::types::ExportFormat>,
   34     34   
    /// <p>Choice of whether to execute as a full export or incremental export. Valid values are FULL_EXPORT or INCREMENTAL_EXPORT. The default value is FULL_EXPORT. If INCREMENTAL_EXPORT is provided, the IncrementalExportSpecification must also be used.</p>
   35     35   
    pub export_type: ::std::option::Option<crate::types::ExportType>,
   36     36   
    /// <p>Optional object containing the parameters specific to an incremental export.</p>
   37     37   
    pub incremental_export_specification: ::std::option::Option<crate::types::IncrementalExportSpecification>,
   38     38   
}
   39     39   
impl ExportTableToPointInTimeInput {
   40     40   
    /// <p>The Amazon Resource Name (ARN) associated with the table to export.</p>
   41     41   
    pub fn table_arn(&self) -> ::std::option::Option<&str> {
   42     42   
        self.table_arn.as_deref()
   43     43   
    }
   44     44   
    /// <p>Time in the past from which to export table data, counted in seconds from the start of the Unix epoch. The table export will be a snapshot of the table's state at this point in time.</p>
   45     45   
    pub fn export_time(&self) -> ::std::option::Option<&::aws_smithy_types::DateTime> {
   46     46   
        self.export_time.as_ref()
   47     47   
    }
   48     48   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
   49     49   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
   50         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
          50  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
   51     51   
    pub fn client_token(&self) -> ::std::option::Option<&str> {
   52     52   
        self.client_token.as_deref()
   53     53   
    }
   54     54   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>
   55     55   
    pub fn s3_bucket(&self) -> ::std::option::Option<&str> {
   56     56   
        self.s3_bucket.as_deref()
   57     57   
    }
   58     58   
    /// <p>The ID of the Amazon Web Services account that owns the bucket the export will be stored in.</p><note>
   59     59   
    /// <p>S3BucketOwner is a required parameter when exporting to a S3 bucket in another account.</p>
   60     60   
    /// </note>
@@ -120,120 +194,194 @@
  140    140   
    pub fn set_export_time(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
  141    141   
        self.export_time = input;
  142    142   
        self
  143    143   
    }
  144    144   
    /// <p>Time in the past from which to export table data, counted in seconds from the start of the Unix epoch. The table export will be a snapshot of the table's state at this point in time.</p>
  145    145   
    pub fn get_export_time(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
  146    146   
        &self.export_time
  147    147   
    }
  148    148   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  149    149   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  150         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         150  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  151    151   
    pub fn client_token(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  152    152   
        self.client_token = ::std::option::Option::Some(input.into());
  153    153   
        self
  154    154   
    }
  155    155   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  156    156   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  157         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         157  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  158    158   
    pub fn set_client_token(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  159    159   
        self.client_token = input;
  160    160   
        self
  161    161   
    }
  162    162   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  163    163   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  164         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         164  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  165    165   
    pub fn get_client_token(&self) -> &::std::option::Option<::std::string::String> {
  166    166   
        &self.client_token
  167    167   
    }
  168    168   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>
  169    169   
    /// This field is required.
  170    170   
    pub fn s3_bucket(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  171    171   
        self.s3_bucket = ::std::option::Option::Some(input.into());
  172    172   
        self
  173    173   
    }
  174    174   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/export_table_to_point_in_time/builders.rs

@@ -111,111 +185,185 @@
  131    131   
    pub fn set_export_time(mut self, input: ::std::option::Option<::aws_smithy_types::DateTime>) -> Self {
  132    132   
        self.inner = self.inner.set_export_time(input);
  133    133   
        self
  134    134   
    }
  135    135   
    /// <p>Time in the past from which to export table data, counted in seconds from the start of the Unix epoch. The table export will be a snapshot of the table's state at this point in time.</p>
  136    136   
    pub fn get_export_time(&self) -> &::std::option::Option<::aws_smithy_types::DateTime> {
  137    137   
        self.inner.get_export_time()
  138    138   
    }
  139    139   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  140    140   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  141         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         141  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  142    142   
    pub fn client_token(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  143    143   
        self.inner = self.inner.client_token(input.into());
  144    144   
        self
  145    145   
    }
  146    146   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  147    147   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  148         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         148  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  149    149   
    pub fn set_client_token(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  150    150   
        self.inner = self.inner.set_client_token(input);
  151    151   
        self
  152    152   
    }
  153    153   
    /// <p>Providing a <code>ClientToken</code> makes the call to <code>ExportTableToPointInTimeInput</code> idempotent, meaning that multiple identical calls have the same effect as one single call.</p>
  154    154   
    /// <p>A client token is valid for 8 hours after the first request that uses it is completed. After 8 hours, any request with the same client token is treated as a new request. Do not resubmit the same request with the same client token for more than 8 hours, or the result might not be idempotent.</p>
  155         -
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ImportConflictException</code>.</p>
         155  +
    /// <p>If you submit a request with the same client token but a change in other parameters within the 8-hour idempotency window, DynamoDB returns an <code>ExportConflictException</code>.</p>
  156    156   
    pub fn get_client_token(&self) -> &::std::option::Option<::std::string::String> {
  157    157   
        self.inner.get_client_token()
  158    158   
    }
  159    159   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>
  160    160   
    pub fn s3_bucket(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  161    161   
        self.inner = self.inner.s3_bucket(input.into());
  162    162   
        self
  163    163   
    }
  164    164   
    /// <p>The name of the Amazon S3 bucket to export the snapshot to.</p>
  165    165   
    pub fn set_s3_bucket(mut self, input: ::std::option::Option<::std::string::String>) -> Self {

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/list_exports/builders.rs

@@ -1,1 +55,55 @@
   15     15   
            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
   16     16   
        >,
   17     17   
    > {
   18     18   
        let mut fluent_builder = client.list_exports();
   19     19   
        fluent_builder.inner = self;
   20     20   
        fluent_builder.send().await
   21     21   
    }
   22     22   
}
   23     23   
/// Fluent builder constructing a request to `ListExports`.
   24     24   
///
   25         -
/// <p>Lists completed exports within the past 90 days.</p>
          25  +
/// <p>Lists completed exports within the past 90 days, in reverse alphanumeric order of <code>ExportArn</code>.</p>
   26     26   
#[derive(::std::clone::Clone, ::std::fmt::Debug)]
   27     27   
pub struct ListExportsFluentBuilder {
   28     28   
    handle: ::std::sync::Arc<crate::client::Handle>,
   29     29   
    inner: crate::operation::list_exports::builders::ListExportsInputBuilder,
   30     30   
    config_override: ::std::option::Option<crate::config::Builder>,
   31     31   
}
   32     32   
impl
   33     33   
    crate::client::customize::internal::CustomizableSend<
   34     34   
        crate::operation::list_exports::ListExportsOutput,
   35     35   
        crate::operation::list_exports::ListExportsError,

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/put_item/builders.rs

@@ -1,1 +59,61 @@
   20     20   
        fluent_builder.send().await
   21     21   
    }
   22     22   
}
   23     23   
/// Fluent builder constructing a request to `PutItem`.
   24     24   
///
   25     25   
/// <p>Creates a new item, or replaces an old item with a new item. If an item that has the same primary key as the new item already exists in the specified table, the new item completely replaces the existing item. You can perform a conditional put operation (add a new item if one with the specified primary key doesn't exist), or replace an existing item if it has certain attribute values. You can return the item's attribute values in the same operation, using the <code>ReturnValues</code> parameter.</p>
   26     26   
/// <p>When you add an item, the primary key attributes are the only required attributes.</p>
   27     27   
/// <p>Empty String and Binary attribute values are allowed. Attribute values of type String and Binary must have a length greater than zero if the attribute is used as a key attribute for a table or index. Set type attributes cannot be empty.</p>
   28     28   
/// <p>Invalid Requests with empty values will be rejected with a <code>ValidationException</code> exception.</p><note>
   29     29   
/// <p>To prevent a new item from replacing an existing item, use a conditional expression that contains the <code>attribute_not_exists</code> function with the name of the attribute being used as the partition key for the table. Since every record must contain that attribute, the <code>attribute_not_exists</code> function will only succeed if no matching item exists.</p>
          30  +
/// </note> <note>
          31  +
/// <p>To determine whether <code>PutItem</code> overwrote an existing item, use <code>ReturnValues</code> set to <code>ALL_OLD</code>. If the response includes the <code>Attributes</code> element, an existing item was overwritten.</p>
   30     32   
/// </note>
   31     33   
/// <p>For more information about <code>PutItem</code>, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html">Working with Items</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
   32     34   
#[derive(::std::clone::Clone, ::std::fmt::Debug)]
   33     35   
pub struct PutItemFluentBuilder {
   34     36   
    handle: ::std::sync::Arc<crate::client::Handle>,
   35     37   
    inner: crate::operation::put_item::builders::PutItemInputBuilder,
   36     38   
    config_override: ::std::option::Option<crate::config::Builder>,
   37     39   
}
   38     40   
impl crate::client::customize::internal::CustomizableSend<crate::operation::put_item::PutItemOutput, crate::operation::put_item::PutItemError>
   39     41   
    for PutItemFluentBuilder

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/transact_get_items.rs

@@ -304,304 +364,364 @@
  324    324   
    /// <ul>
  325    325   
    /// <li>
  326    326   
    /// <p>There is an ongoing <code>TransactGetItems</code> operation that conflicts with a concurrent <code>PutItem</code>, <code>UpdateItem</code>, <code>DeleteItem</code> or <code>TransactWriteItems</code> request. In this case the <code>TransactGetItems</code> operation fails with a <code>TransactionCanceledException</code>.</p></li>
  327    327   
    /// <li>
  328    328   
    /// <p>A table in the <code>TransactGetItems</code> request is in a different account or region.</p></li>
  329    329   
    /// <li>
  330    330   
    /// <p>There is insufficient provisioned capacity for the transaction to be completed.</p></li>
  331    331   
    /// <li>
  332    332   
    /// <p>There is a user error, such as an invalid data format.</p></li>
  333    333   
    /// </ul><note>
  334         -
    /// <p>If using Java, DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. This property is not set for other languages. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
         334  +
    /// <p>DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
  335    335   
    /// </note>
  336    336   
    /// <p>Cancellation reason codes and possible error messages:</p>
  337    337   
    /// <ul>
  338    338   
    /// <li>
  339    339   
    /// <p>No Errors:</p>
  340    340   
    /// <ul>
  341    341   
    /// <li>
  342    342   
    /// <p>Code: <code>None</code></p></li>
  343    343   
    /// <li>
  344    344   
    /// <p>Message: <code>null</code></p></li>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/transact_write_items.rs

@@ -323,323 +383,383 @@
  343    343   
    /// <ul>
  344    344   
    /// <li>
  345    345   
    /// <p>There is an ongoing <code>TransactGetItems</code> operation that conflicts with a concurrent <code>PutItem</code>, <code>UpdateItem</code>, <code>DeleteItem</code> or <code>TransactWriteItems</code> request. In this case the <code>TransactGetItems</code> operation fails with a <code>TransactionCanceledException</code>.</p></li>
  346    346   
    /// <li>
  347    347   
    /// <p>A table in the <code>TransactGetItems</code> request is in a different account or region.</p></li>
  348    348   
    /// <li>
  349    349   
    /// <p>There is insufficient provisioned capacity for the transaction to be completed.</p></li>
  350    350   
    /// <li>
  351    351   
    /// <p>There is a user error, such as an invalid data format.</p></li>
  352    352   
    /// </ul><note>
  353         -
    /// <p>If using Java, DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. This property is not set for other languages. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
         353  +
    /// <p>DynamoDB lists the cancellation reasons on the <code>CancellationReasons</code> property. Transaction cancellation reasons are ordered in the order of requested items, if an item has no error it will have <code>None</code> code and <code>Null</code> message.</p>
  354    354   
    /// </note>
  355    355   
    /// <p>Cancellation reason codes and possible error messages:</p>
  356    356   
    /// <ul>
  357    357   
    /// <li>
  358    358   
    /// <p>No Errors:</p>
  359    359   
    /// <ul>
  360    360   
    /// <li>
  361    361   
    /// <p>Code: <code>None</code></p></li>
  362    362   
    /// <li>
  363    363   
    /// <p>Message: <code>null</code></p></li>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/update_item/_update_item_input.rs

@@ -44,44 +109,109 @@
   64     64   
    /// <ul>
   65     65   
    /// <li>
   66     66   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
   67     67   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
   68     68   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
   69     69   
    /// </note></li>
   70     70   
    /// <li>
   71     71   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
   72     72   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
   73     73   
    /// </ul><important>
   74         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
          74  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
   75     75   
    /// </important></li>
   76     76   
    /// <li>
   77     77   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
   78     78   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
   79         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
          79  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
   80     80   
    /// </important></li>
   81     81   
    /// </ul>
   82     82   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
   83     83   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
   84     84   
    pub update_expression: ::std::option::Option<::std::string::String>,
   85     85   
    /// <p>A condition that must be satisfied in order for a conditional update to succeed.</p>
   86     86   
    /// <p>An expression can contain any of the following:</p>
   87     87   
    /// <ul>
   88     88   
    /// <li>
   89     89   
    /// <p>Functions: <code>attribute_exists | attribute_not_exists | attribute_type | contains | begins_with | size</code></p>
@@ -195,195 +260,260 @@
  215    215   
    /// <ul>
  216    216   
    /// <li>
  217    217   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  218    218   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  219    219   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  220    220   
    /// </note></li>
  221    221   
    /// <li>
  222    222   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  223    223   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  224    224   
    /// </ul><important>
  225         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         225  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  226    226   
    /// </important></li>
  227    227   
    /// <li>
  228    228   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  229    229   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  230         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         230  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  231    231   
    /// </important></li>
  232    232   
    /// </ul>
  233    233   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  234    234   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  235    235   
    pub fn update_expression(&self) -> ::std::option::Option<&str> {
  236    236   
        self.update_expression.as_deref()
  237    237   
    }
  238    238   
    /// <p>A condition that must be satisfied in order for a conditional update to succeed.</p>
  239    239   
    /// <p>An expression can contain any of the following:</p>
  240    240   
    /// <ul>
@@ -536,536 +683,683 @@
  556    556   
    /// <ul>
  557    557   
    /// <li>
  558    558   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  559    559   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  560    560   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  561    561   
    /// </note></li>
  562    562   
    /// <li>
  563    563   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  564    564   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  565    565   
    /// </ul><important>
  566         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         566  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  567    567   
    /// </important></li>
  568    568   
    /// <li>
  569    569   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  570    570   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  571         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         571  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  572    572   
    /// </important></li>
  573    573   
    /// </ul>
  574    574   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  575    575   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  576    576   
    pub fn update_expression(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  577    577   
        self.update_expression = ::std::option::Option::Some(input.into());
  578    578   
        self
  579    579   
    }
  580    580   
    /// <p>An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them.</p>
  581    581   
    /// <p>The following action values are available for <code>UpdateExpression</code>.</p>
  582    582   
    /// <ul>
  583    583   
    /// <li>
  584    584   
    /// <p><code>SET</code> - Adds one or more attributes and values to an item. If any of these attributes already exist, they are replaced by the new values. You can also use <code>SET</code> to add or subtract from an attribute that is of type Number. For example: <code>SET myNum = myNum + :val</code></p>
  585    585   
    /// <p><code>SET</code> supports the following functions:</p>
  586    586   
    /// <ul>
  587    587   
    /// <li>
  588    588   
    /// <p><code>if_not_exists (path, operand)</code> - if the item does not contain an attribute at the specified path, then <code>if_not_exists</code> evaluates to operand; otherwise, it evaluates to path. You can use this function to avoid overwriting an attribute that may already be present in the item.</p></li>
  589    589   
    /// <li>
  590    590   
    /// <p><code>list_append (operand, operand)</code> - evaluates to a list with a new element added to it. You can append the new element to the start or the end of the list by reversing the order of the operands.</p></li>
  591    591   
    /// </ul>
  592    592   
    /// <p>These function names are case-sensitive.</p></li>
  593    593   
    /// <li>
  594    594   
    /// <p><code>REMOVE</code> - Removes one or more attributes from an item.</p></li>
  595    595   
    /// <li>
  596    596   
    /// <p><code>ADD</code> - Adds the specified value to the item, if the attribute does not already exist. If the attribute does exist, then the behavior of <code>ADD</code> depends on the data type of the attribute:</p>
  597    597   
    /// <ul>
  598    598   
    /// <li>
  599    599   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  600    600   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  601    601   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  602    602   
    /// </note></li>
  603    603   
    /// <li>
  604    604   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  605    605   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  606    606   
    /// </ul><important>
  607         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         607  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  608    608   
    /// </important></li>
  609    609   
    /// <li>
  610    610   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  611    611   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  612         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         612  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  613    613   
    /// </important></li>
  614    614   
    /// </ul>
  615    615   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  616    616   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  617    617   
    pub fn set_update_expression(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  618    618   
        self.update_expression = input;
  619    619   
        self
  620    620   
    }
  621    621   
    /// <p>An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them.</p>
  622    622   
    /// <p>The following action values are available for <code>UpdateExpression</code>.</p>
  623    623   
    /// <ul>
  624    624   
    /// <li>
  625    625   
    /// <p><code>SET</code> - Adds one or more attributes and values to an item. If any of these attributes already exist, they are replaced by the new values. You can also use <code>SET</code> to add or subtract from an attribute that is of type Number. For example: <code>SET myNum = myNum + :val</code></p>
  626    626   
    /// <p><code>SET</code> supports the following functions:</p>
  627    627   
    /// <ul>
  628    628   
    /// <li>
  629    629   
    /// <p><code>if_not_exists (path, operand)</code> - if the item does not contain an attribute at the specified path, then <code>if_not_exists</code> evaluates to operand; otherwise, it evaluates to path. You can use this function to avoid overwriting an attribute that may already be present in the item.</p></li>
  630    630   
    /// <li>
  631    631   
    /// <p><code>list_append (operand, operand)</code> - evaluates to a list with a new element added to it. You can append the new element to the start or the end of the list by reversing the order of the operands.</p></li>
  632    632   
    /// </ul>
  633    633   
    /// <p>These function names are case-sensitive.</p></li>
  634    634   
    /// <li>
  635    635   
    /// <p><code>REMOVE</code> - Removes one or more attributes from an item.</p></li>
  636    636   
    /// <li>
  637    637   
    /// <p><code>ADD</code> - Adds the specified value to the item, if the attribute does not already exist. If the attribute does exist, then the behavior of <code>ADD</code> depends on the data type of the attribute:</p>
  638    638   
    /// <ul>
  639    639   
    /// <li>
  640    640   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  641    641   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  642    642   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  643    643   
    /// </note></li>
  644    644   
    /// <li>
  645    645   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  646    646   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  647    647   
    /// </ul><important>
  648         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         648  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  649    649   
    /// </important></li>
  650    650   
    /// <li>
  651    651   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  652    652   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  653         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         653  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  654    654   
    /// </important></li>
  655    655   
    /// </ul>
  656    656   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  657    657   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  658    658   
    pub fn get_update_expression(&self) -> &::std::option::Option<::std::string::String> {
  659    659   
        &self.update_expression
  660    660   
    }
  661    661   
    /// <p>A condition that must be satisfied in order for a conditional update to succeed.</p>
  662    662   
    /// <p>An expression can contain any of the following:</p>
  663    663   
    /// <ul>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/update_item/builders.rs

@@ -316,316 +463,463 @@
  336    336   
    /// <ul>
  337    337   
    /// <li>
  338    338   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  339    339   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  340    340   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  341    341   
    /// </note></li>
  342    342   
    /// <li>
  343    343   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  344    344   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  345    345   
    /// </ul><important>
  346         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         346  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  347    347   
    /// </important></li>
  348    348   
    /// <li>
  349    349   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  350    350   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  351         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         351  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  352    352   
    /// </important></li>
  353    353   
    /// </ul>
  354    354   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  355    355   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  356    356   
    pub fn update_expression(mut self, input: impl ::std::convert::Into<::std::string::String>) -> Self {
  357    357   
        self.inner = self.inner.update_expression(input.into());
  358    358   
        self
  359    359   
    }
  360    360   
    /// <p>An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them.</p>
  361    361   
    /// <p>The following action values are available for <code>UpdateExpression</code>.</p>
  362    362   
    /// <ul>
  363    363   
    /// <li>
  364    364   
    /// <p><code>SET</code> - Adds one or more attributes and values to an item. If any of these attributes already exist, they are replaced by the new values. You can also use <code>SET</code> to add or subtract from an attribute that is of type Number. For example: <code>SET myNum = myNum + :val</code></p>
  365    365   
    /// <p><code>SET</code> supports the following functions:</p>
  366    366   
    /// <ul>
  367    367   
    /// <li>
  368    368   
    /// <p><code>if_not_exists (path, operand)</code> - if the item does not contain an attribute at the specified path, then <code>if_not_exists</code> evaluates to operand; otherwise, it evaluates to path. You can use this function to avoid overwriting an attribute that may already be present in the item.</p></li>
  369    369   
    /// <li>
  370    370   
    /// <p><code>list_append (operand, operand)</code> - evaluates to a list with a new element added to it. You can append the new element to the start or the end of the list by reversing the order of the operands.</p></li>
  371    371   
    /// </ul>
  372    372   
    /// <p>These function names are case-sensitive.</p></li>
  373    373   
    /// <li>
  374    374   
    /// <p><code>REMOVE</code> - Removes one or more attributes from an item.</p></li>
  375    375   
    /// <li>
  376    376   
    /// <p><code>ADD</code> - Adds the specified value to the item, if the attribute does not already exist. If the attribute does exist, then the behavior of <code>ADD</code> depends on the data type of the attribute:</p>
  377    377   
    /// <ul>
  378    378   
    /// <li>
  379    379   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  380    380   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  381    381   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  382    382   
    /// </note></li>
  383    383   
    /// <li>
  384    384   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  385    385   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  386    386   
    /// </ul><important>
  387         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         387  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  388    388   
    /// </important></li>
  389    389   
    /// <li>
  390    390   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  391    391   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  392         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         392  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  393    393   
    /// </important></li>
  394    394   
    /// </ul>
  395    395   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  396    396   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  397    397   
    pub fn set_update_expression(mut self, input: ::std::option::Option<::std::string::String>) -> Self {
  398    398   
        self.inner = self.inner.set_update_expression(input);
  399    399   
        self
  400    400   
    }
  401    401   
    /// <p>An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them.</p>
  402    402   
    /// <p>The following action values are available for <code>UpdateExpression</code>.</p>
  403    403   
    /// <ul>
  404    404   
    /// <li>
  405    405   
    /// <p><code>SET</code> - Adds one or more attributes and values to an item. If any of these attributes already exist, they are replaced by the new values. You can also use <code>SET</code> to add or subtract from an attribute that is of type Number. For example: <code>SET myNum = myNum + :val</code></p>
  406    406   
    /// <p><code>SET</code> supports the following functions:</p>
  407    407   
    /// <ul>
  408    408   
    /// <li>
  409    409   
    /// <p><code>if_not_exists (path, operand)</code> - if the item does not contain an attribute at the specified path, then <code>if_not_exists</code> evaluates to operand; otherwise, it evaluates to path. You can use this function to avoid overwriting an attribute that may already be present in the item.</p></li>
  410    410   
    /// <li>
  411    411   
    /// <p><code>list_append (operand, operand)</code> - evaluates to a list with a new element added to it. You can append the new element to the start or the end of the list by reversing the order of the operands.</p></li>
  412    412   
    /// </ul>
  413    413   
    /// <p>These function names are case-sensitive.</p></li>
  414    414   
    /// <li>
  415    415   
    /// <p><code>REMOVE</code> - Removes one or more attributes from an item.</p></li>
  416    416   
    /// <li>
  417    417   
    /// <p><code>ADD</code> - Adds the specified value to the item, if the attribute does not already exist. If the attribute does exist, then the behavior of <code>ADD</code> depends on the data type of the attribute:</p>
  418    418   
    /// <ul>
  419    419   
    /// <li>
  420    420   
    /// <p>If the existing attribute is a number, and if <code>Value</code> is also a number, then <code>Value</code> is mathematically added to the existing attribute. If <code>Value</code> is a negative number, then it is subtracted from the existing attribute.</p><note>
  421    421   
    /// <p>If you use <code>ADD</code> to increment or decrement a number value for an item that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value.</p>
  422    422   
    /// <p>Similarly, if you use <code>ADD</code> for an existing item to increment or decrement an attribute value that doesn't exist before the update, DynamoDB uses <code>0</code> as the initial value. For example, suppose that the item you want to update doesn't have an attribute named <code>itemcount</code>, but you decide to <code>ADD</code> the number <code>3</code> to this attribute anyway. DynamoDB will create the <code>itemcount</code> attribute, set its initial value to <code>0</code>, and finally add <code>3</code> to it. The result will be a new <code>itemcount</code> attribute in the item, with a value of <code>3</code>.</p>
  423    423   
    /// </note></li>
  424    424   
    /// <li>
  425    425   
    /// <p>If the existing data type is a set and if <code>Value</code> is also a set, then <code>Value</code> is added to the existing set. For example, if the attribute value is the set <code>\[1,2\]</code>, and the <code>ADD</code> action specified <code>\[3\]</code>, then the final attribute value is <code>\[1,2,3\]</code>. An error occurs if an <code>ADD</code> action is specified for a set attribute and the attribute type specified does not match the existing set type.</p>
  426    426   
    /// <p>Both sets must have the same primitive data type. For example, if the existing data type is a set of strings, the <code>Value</code> must also be a set of strings.</p></li>
  427    427   
    /// </ul><important>
  428         -
    /// <p>The <code>ADD</code> action only supports Number and set data types. In addition, <code>ADD</code> can only be used on top-level attributes, not nested attributes.</p>
         428  +
    /// <p>The <code>ADD</code> action only supports Number and set data types.</p>
  429    429   
    /// </important></li>
  430    430   
    /// <li>
  431    431   
    /// <p><code>DELETE</code> - Deletes an element from a set.</p>
  432    432   
    /// <p>If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set <code>\[a,b,c\]</code> and the <code>DELETE</code> action specifies <code>\[a,c\]</code>, then the final attribute value is <code>\[b\]</code>. Specifying an empty set is an error.</p><important>
  433         -
    /// <p>The <code>DELETE</code> action only supports set data types. In addition, <code>DELETE</code> can only be used on top-level attributes, not nested attributes.</p>
         433  +
    /// <p>The <code>DELETE</code> action only supports set data types.</p>
  434    434   
    /// </important></li>
  435    435   
    /// </ul>
  436    436   
    /// <p>You can have many actions in a single expression, such as the following: <code>SET a=:value1, b=:value2 DELETE :value3, :value4, :value5</code></p>
  437    437   
    /// <p>For more information on update expressions, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html">Modifying Items and Attributes</a> in the <i>Amazon DynamoDB Developer Guide</i>.</p>
  438    438   
    pub fn get_update_expression(&self) -> &::std::option::Option<::std::string::String> {
  439    439   
        self.inner.get_update_expression()
  440    440   
    }
  441    441   
    /// <p>A condition that must be satisfied in order for a conditional update to succeed.</p>
  442    442   
    /// <p>An expression can contain any of the following:</p>
  443    443   
    /// <ul>

tmp-codegen-diff/aws-sdk/sdk/dynamodb/src/operation/update_table/_update_table_input.rs

@@ -39,39 +98,106 @@
   59     59   
    /// <li>
   60     60   
    /// <p><code>Delete</code> - remove a witness from the global table.</p></li>
   61     61   
    /// </ul>
   62     62   
    /// <p>You can create or delete only one witness per <code>UpdateTable</code> operation.</p>
   63     63   
    /// <p>For more information, see <a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/V2globaltables_HowItWorks.html#V2globaltables_HowItWorks.consistency-modes">Multi-Region strong consistency (MRSC)</a> in the Amazon DynamoDB Developer Guide</p>
   64     64   
    pub global_table_witness_updates: ::std::option::Option<::std::vec::Vec<crate::types::GlobalTableWitnessGroupUpdate>>,
   65     65   
    /// <p>Updates the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
   66     66   
    pub on_demand_throughput: ::std::option::Option<crate::types::OnDemandThroughput>,
   67     67   
    /// <p>Represents the warm throughput (in read units per second and write units per second) for updating a table.</p>
   68     68   
    pub warm_throughput: ::std::option::Option<crate::types::WarmThroughput>,
          69  +
    /// <p>Controls the settings replication mode for a global table replica. This attribute can be defined using UpdateTable operation only on a regional table with values:</p>
          70  +
    /// <ul>
          71  +
    /// <li>
          72  +
    /// <p><code>ENABLED</code>: Defines settings replication on a regional table to be used as a source table for creating Multi-Account Global Table.</p></li>
          73  +
    /// <li>
          74  +
    /// <p><code>DISABLED</code>: Remove settings replication on a regional table. Settings replication needs to be defined to ENABLED again in order to create a Multi-Account Global Table using this table.</p></li>
          75  +
    /// </ul>
          76  +
    pub global_table_settings_replication_mode: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
   69     77   
}
   70     78   
impl UpdateTableInput {
   71     79   
    /// <p>An array of attributes that describe the key schema for the table and indexes. If you are adding a new global secondary index to the table, <code>AttributeDefinitions</code> must include the key element(s) of the new index.</p>
   72     80   
    ///
   73     81   
    /// If no value was sent for this field, a default will be set. If you want to determine if no value was sent, use `.attribute_definitions.is_none()`.
   74     82   
    pub fn attribute_definitions(&self) -> &[crate::types::AttributeDefinition] {
   75     83   
        self.attribute_definitions.as_deref().unwrap_or_default()
   76     84   
    }
   77     85   
    /// <p>The name of the table to be updated. You can also provide the Amazon Resource Name (ARN) of the table in this parameter.</p>
   78     86   
    pub fn table_name(&self) -> ::std::option::Option<&str> {
@@ -139,147 +224,243 @@
  159    167   
        self.global_table_witness_updates.as_deref().unwrap_or_default()
  160    168   
    }
  161    169   
    /// <p>Updates the maximum number of read and write units for the specified table in on-demand capacity mode. If you use this parameter, you must specify <code>MaxReadRequestUnits</code>, <code>MaxWriteRequestUnits</code>, or both.</p>
  162    170   
    pub fn on_demand_throughput(&self) -> ::std::option::Option<&crate::types::OnDemandThroughput> {
  163    171   
        self.on_demand_throughput.as_ref()
  164    172   
    }
  165    173   
    /// <p>Represents the warm throughput (in read units per second and write units per second) for updating a table.</p>
  166    174   
    pub fn warm_throughput(&self) -> ::std::option::Option<&crate::types::WarmThroughput> {
  167    175   
        self.warm_throughput.as_ref()
  168    176   
    }
         177  +
    /// <p>Controls the settings replication mode for a global table replica. This attribute can be defined using UpdateTable operation only on a regional table with values:</p>
         178  +
    /// <ul>
         179  +
    /// <li>
         180  +
    /// <p><code>ENABLED</code>: Defines settings replication on a regional table to be used as a source table for creating Multi-Account Global Table.</p></li>
         181  +
    /// <li>
         182  +
    /// <p><code>DISABLED</code>: Remove settings replication on a regional table. Settings replication needs to be defined to ENABLED again in order to create a Multi-Account Global Table using this table.</p></li>
         183  +
    /// </ul>
         184  +
    pub fn global_table_settings_replication_mode(&self) -> ::std::option::Option<&crate::types::GlobalTableSettingsReplicationMode> {
         185  +
        self.global_table_settings_replication_mode.as_ref()
         186  +
    }
  169    187   
}
  170    188   
impl UpdateTableInput {
  171    189   
    /// Creates a new builder-style object to manufacture [`UpdateTableInput`](crate::operation::update_table::UpdateTableInput).
  172    190   
    pub fn builder() -> crate::operation::update_table::builders::UpdateTableInputBuilder {
  173    191   
        crate::operation::update_table::builders::UpdateTableInputBuilder::default()
  174    192   
    }
  175    193   
}
  176    194   
  177    195   
/// A builder for [`UpdateTableInput`](crate::operation::update_table::UpdateTableInput).
  178    196   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
  179    197   
#[non_exhaustive]
  180    198   
pub struct UpdateTableInputBuilder {
  181    199   
    pub(crate) attribute_definitions: ::std::option::Option<::std::vec::Vec<crate::types::AttributeDefinition>>,
  182    200   
    pub(crate) table_name: ::std::option::Option<::std::string::String>,
  183    201   
    pub(crate) billing_mode: ::std::option::Option<crate::types::BillingMode>,
  184    202   
    pub(crate) provisioned_throughput: ::std::option::Option<crate::types::ProvisionedThroughput>,
  185    203   
    pub(crate) global_secondary_index_updates: ::std::option::Option<::std::vec::Vec<crate::types::GlobalSecondaryIndexUpdate>>,
  186    204   
    pub(crate) stream_specification: ::std::option::Option<crate::types::StreamSpecification>,
  187    205   
    pub(crate) sse_specification: ::std::option::Option<crate::types::SseSpecification>,
  188    206   
    pub(crate) replica_updates: ::std::option::Option<::std::vec::Vec<crate::types::ReplicationGroupUpdate>>,
  189    207   
    pub(crate) table_class: ::std::option::Option<crate::types::TableClass>,
  190    208   
    pub(crate) deletion_protection_enabled: ::std::option::Option<bool>,
  191    209   
    pub(crate) multi_region_consistency: ::std::option::Option<crate::types::MultiRegionConsistency>,
  192    210   
    pub(crate) global_table_witness_updates: ::std::option::Option<::std::vec::Vec<crate::types::GlobalTableWitnessGroupUpdate>>,
  193    211   
    pub(crate) on_demand_throughput: ::std::option::Option<crate::types::OnDemandThroughput>,
  194    212   
    pub(crate) warm_throughput: ::std::option::Option<crate::types::WarmThroughput>,
         213  +
    pub(crate) global_table_settings_replication_mode: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
  195    214   
}
  196    215   
impl UpdateTableInputBuilder {
  197    216   
    /// Appends an item to `attribute_definitions`.
  198    217   
    ///
  199    218   
    /// To override the contents of this collection use [`set_attribute_definitions`](Self::set_attribute_definitions).
  200    219   
    ///
  201    220   
    /// <p>An array of attributes that describe the key schema for the table and indexes. If you are adding a new global secondary index to the table, <code>AttributeDefinitions</code> must include the key element(s) of the new index.</p>
  202    221   
    pub fn attribute_definitions(mut self, input: crate::types::AttributeDefinition) -> Self {
  203    222   
        let mut v = self.attribute_definitions.unwrap_or_default();
  204    223   
        v.push(input);
@@ -496,515 +545,600 @@
  516    535   
    }
  517    536   
    /// <p>Represents the warm throughput (in read units per second and write units per second) for updating a table.</p>
  518    537   
    pub fn set_warm_throughput(mut self, input: ::std::option::Option<crate::types::WarmThroughput>) -> Self {
  519    538   
        self.warm_throughput = input;
  520    539   
        self
  521    540   
    }
  522    541   
    /// <p>Represents the warm throughput (in read units per second and write units per second) for updating a table.</p>
  523    542   
    pub fn get_warm_throughput(&self) -> &::std::option::Option<crate::types::WarmThroughput> {
  524    543   
        &self.warm_throughput
  525    544   
    }
         545  +
    /// <p>Controls the settings replication mode for a global table replica. This attribute can be defined using UpdateTable operation only on a regional table with values:</p>
         546  +
    /// <ul>
         547  +
    /// <li>
         548  +
    /// <p><code>ENABLED</code>: Defines settings replication on a regional table to be used as a source table for creating Multi-Account Global Table.</p></li>
         549  +
    /// <li>
         550  +
    /// <p><code>DISABLED</code>: Remove settings replication on a regional table. Settings replication needs to be defined to ENABLED again in order to create a Multi-Account Global Table using this table.</p></li>
         551  +
    /// </ul>
         552  +
    pub fn global_table_settings_replication_mode(mut self, input: crate::types::GlobalTableSettingsReplicationMode) -> Self {
         553  +
        self.global_table_settings_replication_mode = ::std::option::Option::Some(input);
         554  +
        self
         555  +
    }
         556  +
    /// <p>Controls the settings replication mode for a global table replica. This attribute can be defined using UpdateTable operation only on a regional table with values:</p>
         557  +
    /// <ul>
         558  +
    /// <li>
         559  +
    /// <p><code>ENABLED</code>: Defines settings replication on a regional table to be used as a source table for creating Multi-Account Global Table.</p></li>
         560  +
    /// <li>
         561  +
    /// <p><code>DISABLED</code>: Remove settings replication on a regional table. Settings replication needs to be defined to ENABLED again in order to create a Multi-Account Global Table using this table.</p></li>
         562  +
    /// </ul>
         563  +
    pub fn set_global_table_settings_replication_mode(
         564  +
        mut self,
         565  +
        input: ::std::option::Option<crate::types::GlobalTableSettingsReplicationMode>,
         566  +
    ) -> Self {
         567  +
        self.global_table_settings_replication_mode = input;
         568  +
        self
         569  +
    }
         570  +
    /// <p>Controls the settings replication mode for a global table replica. This attribute can be defined using UpdateTable operation only on a regional table with values:</p>
         571  +
    /// <ul>
         572  +
    /// <li>
         573  +
    /// <p><code>ENABLED</code>: Defines settings replication on a regional table to be used as a source table for creating Multi-Account Global Table.</p></li>
         574  +
    /// <li>
         575  +
    /// <p><code>DISABLED</code>: Remove settings replication on a regional table. Settings replication needs to be defined to ENABLED again in order to create a Multi-Account Global Table using this table.</p></li>
         576  +
    /// </ul>
         577  +
    pub fn get_global_table_settings_replication_mode(&self) -> &::std::option::Option<crate::types::GlobalTableSettingsReplicationMode> {
         578  +
        &self.global_table_settings_replication_mode
         579  +
    }
  526    580   
    /// Consumes the builder and constructs a [`UpdateTableInput`](crate::operation::update_table::UpdateTableInput).
  527    581   
    pub fn build(self) -> ::std::result::Result<crate::operation::update_table::UpdateTableInput, ::aws_smithy_types::error::operation::BuildError> {
  528    582   
        ::std::result::Result::Ok(crate::operation::update_table::UpdateTableInput {
  529    583   
            attribute_definitions: self.attribute_definitions,
  530    584   
            table_name: self.table_name,
  531    585   
            billing_mode: self.billing_mode,
  532    586   
            provisioned_throughput: self.provisioned_throughput,
  533    587   
            global_secondary_index_updates: self.global_secondary_index_updates,
  534    588   
            stream_specification: self.stream_specification,
  535    589   
            sse_specification: self.sse_specification,
  536    590   
            replica_updates: self.replica_updates,
  537    591   
            table_class: self.table_class,
  538    592   
            deletion_protection_enabled: self.deletion_protection_enabled,
  539    593   
            multi_region_consistency: self.multi_region_consistency,
  540    594   
            global_table_witness_updates: self.global_table_witness_updates,
  541    595   
            on_demand_throughput: self.on_demand_throughput,
  542    596   
            warm_throughput: self.warm_throughput,
         597  +
            global_table_settings_replication_mode: self.global_table_settings_replication_mode,
  543    598   
        })
  544    599   
    }
  545    600   
}