Client Test

Client Test

rev. ec7b2441254af868911fccffe8d8dca83aff0045 (ignoring whitespace)

Files changed:

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/serialization_settings.rs

@@ -1,0 +89,0 @@
    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         -
#![allow(dead_code)]
    8         -
    9         -
use aws_smithy_http::header::set_request_header_if_absent;
   10         -
use aws_smithy_types::config_bag::{Storable, StoreReplace};
   11         -
use http_1x::header::{HeaderName, CONTENT_LENGTH, CONTENT_TYPE};
   12         -
   13         -
/// Configuration for how default protocol headers are serialized
   14         -
#[derive(Clone, Debug, Default)]
   15         -
pub(crate) struct HeaderSerializationSettings {
   16         -
    omit_default_content_length: bool,
   17         -
    omit_default_content_type: bool,
   18         -
}
   19         -
   20         -
impl HeaderSerializationSettings {
   21         -
    /// Creates new [`HeaderSerializationSettings`]
   22         -
    pub(crate) fn new() -> Self {
   23         -
        Default::default()
   24         -
    }
   25         -
   26         -
    /// Omit the default `Content-Length` header during serialization
   27         -
    pub(crate) fn omit_default_content_length(self) -> Self {
   28         -
        Self {
   29         -
            omit_default_content_length: true,
   30         -
            ..self
   31         -
        }
   32         -
    }
   33         -
   34         -
    /// Omit the default `Content-Type` header during serialization
   35         -
    pub(crate) fn omit_default_content_type(self) -> Self {
   36         -
        Self {
   37         -
            omit_default_content_type: true,
   38         -
            ..self
   39         -
        }
   40         -
    }
   41         -
   42         -
    /// Returns true if the given default header name should be serialized
   43         -
    fn include_header(&self, header: &HeaderName) -> bool {
   44         -
        (!self.omit_default_content_length || header != CONTENT_LENGTH) && (!self.omit_default_content_type || header != CONTENT_TYPE)
   45         -
    }
   46         -
   47         -
    /// Sets a default header on the given request builder if it should be serialized
   48         -
    pub(crate) fn set_default_header(
   49         -
        &self,
   50         -
        mut request: http_1x::request::Builder,
   51         -
        header_name: HeaderName,
   52         -
        value: &str,
   53         -
    ) -> http_1x::request::Builder {
   54         -
        if self.include_header(&header_name) {
   55         -
            request = set_request_header_if_absent(request, header_name, value);
   56         -
        }
   57         -
        request
   58         -
    }
   59         -
}
   60         -
   61         -
impl Storable for HeaderSerializationSettings {
   62         -
    type Storer = StoreReplace<Self>;
   63         -
}
   64         -
   65         -
#[cfg(test)]
   66         -
mod tests {
   67         -
    use super::*;
   68         -
   69         -
    #[test]
   70         -
    fn test_include_header() {
   71         -
        let settings = HeaderSerializationSettings::default();
   72         -
        assert!(settings.include_header(&CONTENT_LENGTH));
   73         -
        assert!(settings.include_header(&CONTENT_TYPE));
   74         -
   75         -
        let settings = HeaderSerializationSettings::default().omit_default_content_length();
   76         -
        assert!(!settings.include_header(&CONTENT_LENGTH));
   77         -
        assert!(settings.include_header(&CONTENT_TYPE));
   78         -
   79         -
        let settings = HeaderSerializationSettings::default().omit_default_content_type();
   80         -
        assert!(settings.include_header(&CONTENT_LENGTH));
   81         -
        assert!(!settings.include_header(&CONTENT_TYPE));
   82         -
   83         -
        let settings = HeaderSerializationSettings::default()
   84         -
            .omit_default_content_type()
   85         -
            .omit_default_content_length();
   86         -
        assert!(!settings.include_header(&CONTENT_LENGTH));
   87         -
        assert!(!settings.include_header(&CONTENT_TYPE));
   88         -
    }
   89         -
}

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/_block.rs

@@ -1,1 +118,129 @@
   17     17   
    /// <p>The block index.</p>
   18     18   
    pub fn block_index(&self) -> ::std::option::Option<i32> {
   19     19   
        self.block_index
   20     20   
    }
   21     21   
}
   22     22   
static BLOCK_SCHEMA_ID: ::aws_smithy_schema::ShapeId =
   23     23   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Block", "com.amazonaws.ebs", "Block");
   24     24   
static BLOCK_MEMBER_BLOCK_TOKEN: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   25     25   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Block$BlockToken", "com.amazonaws.ebs", "Block"),
   26     26   
    ::aws_smithy_schema::ShapeType::String,
   27         -
    "block_token",
          27  +
    "BlockToken",
   28     28   
    0,
   29     29   
);
   30     30   
static BLOCK_MEMBER_BLOCK_INDEX: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   31     31   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Block$BlockIndex", "com.amazonaws.ebs", "Block"),
   32     32   
    ::aws_smithy_schema::ShapeType::Integer,
   33         -
    "block_index",
          33  +
    "BlockIndex",
   34     34   
    1,
   35     35   
);
   36     36   
static BLOCK_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   37     37   
    BLOCK_SCHEMA_ID,
   38     38   
    ::aws_smithy_schema::ShapeType::Structure,
   39     39   
    &[&BLOCK_MEMBER_BLOCK_TOKEN, &BLOCK_MEMBER_BLOCK_INDEX],
   40     40   
);
   41     41   
impl Block {
   42     42   
    /// The schema for this shape.
   43     43   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &BLOCK_SCHEMA;
   44     44   
}
   45     45   
impl ::aws_smithy_schema::serde::SerializableStruct for Block {
   46     46   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   47     47   
    fn serialize_members(
   48     48   
        &self,
   49     49   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   50     50   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   51     51   
        if let Some(ref val) = self.block_token {
   52     52   
            ser.write_string(&BLOCK_MEMBER_BLOCK_TOKEN, val)?;
   53     53   
        }
   54     54   
        if let Some(ref val) = self.block_index {
   55     55   
            ser.write_integer(&BLOCK_MEMBER_BLOCK_INDEX, *val)?;
   56     56   
        }
   57     57   
        Ok(())
   58     58   
    }
   59     59   
}
   60     60   
impl Block {
   61     61   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   62         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   63         -
        deserializer: &mut D,
          62  +
    pub fn deserialize(
          63  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   64     64   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   65     65   
        #[allow(unused_variables, unused_mut)]
   66     66   
        let mut builder = Self::builder();
   67     67   
        #[allow(
   68     68   
            unused_variables,
   69     69   
            unreachable_code,
   70     70   
            clippy::single_match,
   71     71   
            clippy::match_single_binding,
   72     72   
            clippy::diverging_sub_expression
   73     73   
        )]
   74         -
        deserializer.read_struct(&BLOCK_SCHEMA, (), |_, member, deser| {
          74  +
        deserializer.read_struct(&BLOCK_SCHEMA, &mut |member, deser| {
   75     75   
            match member.member_index() {
   76     76   
                Some(0) => {
   77     77   
                    builder.block_token = Some(deser.read_string(member)?);
   78     78   
                }
   79     79   
                Some(1) => {
   80     80   
                    builder.block_index = Some(deser.read_integer(member)?);
   81     81   
                }
   82     82   
                _ => {}
   83     83   
            }
   84     84   
            Ok(())
   85     85   
        })?;
   86     86   
        Ok(builder.build())
   87     87   
    }
   88     88   
}
          89  +
impl Block {
          90  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          91  +
    pub fn deserialize_with_response(
          92  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          93  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          94  +
        _status: u16,
          95  +
        _body: &[u8],
          96  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          97  +
        Self::deserialize(deserializer)
          98  +
    }
          99  +
}
   89    100   
impl Block {
   90    101   
    /// Creates a new builder-style object to manufacture [`Block`](crate::types::Block).
   91    102   
    pub fn builder() -> crate::types::builders::BlockBuilder {
   92    103   
        crate::types::builders::BlockBuilder::default()
   93    104   
    }
   94    105   
}
   95    106   
   96    107   
/// A builder for [`Block`](crate::types::Block).
   97    108   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
   98    109   
#[non_exhaustive]

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/_changed_block.rs

@@ -12,12 +150,161 @@
   32     32   
        formatter.field("block_index", &"*** Sensitive Data Redacted ***");
   33     33   
        formatter.field("second_block_token", &"*** Sensitive Data Redacted ***");
   34     34   
        formatter.finish()
   35     35   
    }
   36     36   
}
   37     37   
static CHANGEDBLOCK_SCHEMA_ID: ::aws_smithy_schema::ShapeId =
   38     38   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ChangedBlock", "com.amazonaws.ebs", "ChangedBlock");
   39     39   
static CHANGEDBLOCK_MEMBER_FIRST_BLOCK_TOKEN: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   40     40   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ChangedBlock$FirstBlockToken", "com.amazonaws.ebs", "ChangedBlock"),
   41     41   
    ::aws_smithy_schema::ShapeType::String,
   42         -
    "first_block_token",
          42  +
    "FirstBlockToken",
   43     43   
    0,
   44     44   
);
   45     45   
static CHANGEDBLOCK_MEMBER_BLOCK_INDEX: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   46     46   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ChangedBlock$BlockIndex", "com.amazonaws.ebs", "ChangedBlock"),
   47     47   
    ::aws_smithy_schema::ShapeType::Integer,
   48         -
    "block_index",
          48  +
    "BlockIndex",
   49     49   
    1,
   50     50   
);
   51     51   
static CHANGEDBLOCK_MEMBER_SECOND_BLOCK_TOKEN: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   52     52   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ChangedBlock$SecondBlockToken", "com.amazonaws.ebs", "ChangedBlock"),
   53     53   
    ::aws_smithy_schema::ShapeType::String,
   54         -
    "second_block_token",
          54  +
    "SecondBlockToken",
   55     55   
    2,
   56     56   
);
   57     57   
static CHANGEDBLOCK_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   58     58   
    CHANGEDBLOCK_SCHEMA_ID,
   59     59   
    ::aws_smithy_schema::ShapeType::Structure,
   60     60   
    &[
   61     61   
        &CHANGEDBLOCK_MEMBER_FIRST_BLOCK_TOKEN,
   62     62   
        &CHANGEDBLOCK_MEMBER_BLOCK_INDEX,
   63     63   
        &CHANGEDBLOCK_MEMBER_SECOND_BLOCK_TOKEN,
   64     64   
    ],
   65     65   
)
   66     66   
.with_sensitive();
   67     67   
impl ChangedBlock {
   68     68   
    /// The schema for this shape.
   69     69   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &CHANGEDBLOCK_SCHEMA;
   70     70   
}
   71     71   
impl ::aws_smithy_schema::serde::SerializableStruct for ChangedBlock {
   72     72   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   73     73   
    fn serialize_members(
   74     74   
        &self,
   75     75   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   76     76   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   77     77   
        if let Some(ref val) = self.first_block_token {
   78     78   
            ser.write_string(&CHANGEDBLOCK_MEMBER_FIRST_BLOCK_TOKEN, val)?;
   79     79   
        }
   80     80   
        if let Some(ref val) = self.block_index {
   81     81   
            ser.write_integer(&CHANGEDBLOCK_MEMBER_BLOCK_INDEX, *val)?;
   82     82   
        }
   83     83   
        if let Some(ref val) = self.second_block_token {
   84     84   
            ser.write_string(&CHANGEDBLOCK_MEMBER_SECOND_BLOCK_TOKEN, val)?;
   85     85   
        }
   86     86   
        Ok(())
   87     87   
    }
   88     88   
}
   89     89   
impl ChangedBlock {
   90     90   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   91         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   92         -
        deserializer: &mut D,
          91  +
    pub fn deserialize(
          92  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   93     93   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   94     94   
        #[allow(unused_variables, unused_mut)]
   95     95   
        let mut builder = Self::builder();
   96     96   
        #[allow(
   97     97   
            unused_variables,
   98     98   
            unreachable_code,
   99     99   
            clippy::single_match,
  100    100   
            clippy::match_single_binding,
  101    101   
            clippy::diverging_sub_expression
  102    102   
        )]
  103         -
        deserializer.read_struct(&CHANGEDBLOCK_SCHEMA, (), |_, member, deser| {
         103  +
        deserializer.read_struct(&CHANGEDBLOCK_SCHEMA, &mut |member, deser| {
  104    104   
            match member.member_index() {
  105    105   
                Some(0) => {
  106    106   
                    builder.first_block_token = Some(deser.read_string(member)?);
  107    107   
                }
  108    108   
                Some(1) => {
  109    109   
                    builder.block_index = Some(deser.read_integer(member)?);
  110    110   
                }
  111    111   
                Some(2) => {
  112    112   
                    builder.second_block_token = Some(deser.read_string(member)?);
  113    113   
                }
  114    114   
                _ => {}
  115    115   
            }
  116    116   
            Ok(())
  117    117   
        })?;
  118    118   
        Ok(builder.build())
  119    119   
    }
  120    120   
}
         121  +
impl ChangedBlock {
         122  +
    /// Deserializes this structure from a body deserializer and HTTP response.
         123  +
    pub fn deserialize_with_response(
         124  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
         125  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
         126  +
        _status: u16,
         127  +
        _body: &[u8],
         128  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
         129  +
        Self::deserialize(deserializer)
         130  +
    }
         131  +
}
  121    132   
impl ChangedBlock {
  122    133   
    /// Creates a new builder-style object to manufacture [`ChangedBlock`](crate::types::ChangedBlock).
  123    134   
    pub fn builder() -> crate::types::builders::ChangedBlockBuilder {
  124    135   
        crate::types::builders::ChangedBlockBuilder::default()
  125    136   
    }
  126    137   
}
  127    138   
  128    139   
/// A builder for [`ChangedBlock`](crate::types::ChangedBlock).
  129    140   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default)]
  130    141   
#[non_exhaustive]

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/_tag.rs

@@ -1,1 +117,128 @@
   16     16   
    }
   17     17   
    /// <p>The value of the tag.</p>
   18     18   
    pub fn value(&self) -> ::std::option::Option<&str> {
   19     19   
        self.value.as_deref()
   20     20   
    }
   21     21   
}
   22     22   
static TAG_SCHEMA_ID: ::aws_smithy_schema::ShapeId = ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Tag", "com.amazonaws.ebs", "Tag");
   23     23   
static TAG_MEMBER_KEY: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   24     24   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Tag$Key", "com.amazonaws.ebs", "Tag"),
   25     25   
    ::aws_smithy_schema::ShapeType::String,
   26         -
    "key",
          26  +
    "Key",
   27     27   
    0,
   28     28   
);
   29     29   
static TAG_MEMBER_VALUE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   30     30   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#Tag$Value", "com.amazonaws.ebs", "Tag"),
   31     31   
    ::aws_smithy_schema::ShapeType::String,
   32         -
    "value",
          32  +
    "Value",
   33     33   
    1,
   34     34   
);
   35     35   
static TAG_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   36     36   
    TAG_SCHEMA_ID,
   37     37   
    ::aws_smithy_schema::ShapeType::Structure,
   38     38   
    &[&TAG_MEMBER_KEY, &TAG_MEMBER_VALUE],
   39     39   
);
   40     40   
impl Tag {
   41     41   
    /// The schema for this shape.
   42     42   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &TAG_SCHEMA;
   43     43   
}
   44     44   
impl ::aws_smithy_schema::serde::SerializableStruct for Tag {
   45     45   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   46     46   
    fn serialize_members(
   47     47   
        &self,
   48     48   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   49     49   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   50     50   
        if let Some(ref val) = self.key {
   51     51   
            ser.write_string(&TAG_MEMBER_KEY, val)?;
   52     52   
        }
   53     53   
        if let Some(ref val) = self.value {
   54     54   
            ser.write_string(&TAG_MEMBER_VALUE, val)?;
   55     55   
        }
   56     56   
        Ok(())
   57     57   
    }
   58     58   
}
   59     59   
impl Tag {
   60     60   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   61         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   62         -
        deserializer: &mut D,
          61  +
    pub fn deserialize(
          62  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   63     63   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   64     64   
        #[allow(unused_variables, unused_mut)]
   65     65   
        let mut builder = Self::builder();
   66     66   
        #[allow(
   67     67   
            unused_variables,
   68     68   
            unreachable_code,
   69     69   
            clippy::single_match,
   70     70   
            clippy::match_single_binding,
   71     71   
            clippy::diverging_sub_expression
   72     72   
        )]
   73         -
        deserializer.read_struct(&TAG_SCHEMA, (), |_, member, deser| {
          73  +
        deserializer.read_struct(&TAG_SCHEMA, &mut |member, deser| {
   74     74   
            match member.member_index() {
   75     75   
                Some(0) => {
   76     76   
                    builder.key = Some(deser.read_string(member)?);
   77     77   
                }
   78     78   
                Some(1) => {
   79     79   
                    builder.value = Some(deser.read_string(member)?);
   80     80   
                }
   81     81   
                _ => {}
   82     82   
            }
   83     83   
            Ok(())
   84     84   
        })?;
   85     85   
        Ok(builder.build())
   86     86   
    }
   87     87   
}
          88  +
impl Tag {
          89  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          90  +
    pub fn deserialize_with_response(
          91  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          92  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          93  +
        _status: u16,
          94  +
        _body: &[u8],
          95  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          96  +
        Self::deserialize(deserializer)
          97  +
    }
          98  +
}
   88     99   
impl Tag {
   89    100   
    /// Creates a new builder-style object to manufacture [`Tag`](crate::types::Tag).
   90    101   
    pub fn builder() -> crate::types::builders::TagBuilder {
   91    102   
        crate::types::builders::TagBuilder::default()
   92    103   
    }
   93    104   
}
   94    105   
   95    106   
/// A builder for [`Tag`](crate::types::Tag).
   96    107   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
   97    108   
#[non_exhaustive]

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_access_denied_exception.rs

@@ -1,1 +126,137 @@
   18     18   
}
   19     19   
static ACCESSDENIEDERROR_SCHEMA_ID: ::aws_smithy_schema::ShapeId =
   20     20   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#AccessDeniedException", "com.amazonaws.ebs", "AccessDeniedException");
   21     21   
static ACCESSDENIEDERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   22     22   
    ::aws_smithy_schema::ShapeId::from_static(
   23     23   
        "com.amazonaws.ebs#AccessDeniedException$Message",
   24     24   
        "com.amazonaws.ebs",
   25     25   
        "AccessDeniedException",
   26     26   
    ),
   27     27   
    ::aws_smithy_schema::ShapeType::String,
   28         -
    "message",
          28  +
    "Message",
   29     29   
    0,
   30     30   
);
   31     31   
static ACCESSDENIEDERROR_MEMBER_REASON: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   32     32   
    ::aws_smithy_schema::ShapeId::from_static(
   33     33   
        "com.amazonaws.ebs#AccessDeniedException$Reason",
   34     34   
        "com.amazonaws.ebs",
   35     35   
        "AccessDeniedException",
   36     36   
    ),
   37     37   
    ::aws_smithy_schema::ShapeType::String,
   38         -
    "reason",
          38  +
    "Reason",
   39     39   
    1,
   40     40   
);
   41     41   
static ACCESSDENIEDERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   42     42   
    ACCESSDENIEDERROR_SCHEMA_ID,
   43     43   
    ::aws_smithy_schema::ShapeType::Structure,
   44     44   
    &[&ACCESSDENIEDERROR_MEMBER_MESSAGE, &ACCESSDENIEDERROR_MEMBER_REASON],
   45     45   
);
   46     46   
impl AccessDeniedError {
   47     47   
    /// The schema for this shape.
   48     48   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &ACCESSDENIEDERROR_SCHEMA;
   49     49   
}
   50     50   
impl ::aws_smithy_schema::serde::SerializableStruct for AccessDeniedError {
   51     51   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   52     52   
    fn serialize_members(
   53     53   
        &self,
   54     54   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   55     55   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   56     56   
        if let Some(ref val) = self.message {
   57     57   
            ser.write_string(&ACCESSDENIEDERROR_MEMBER_MESSAGE, val)?;
   58     58   
        }
   59     59   
        {
   60     60   
            let val = &self.reason;
   61     61   
            ser.write_string(&ACCESSDENIEDERROR_MEMBER_REASON, val.as_str())?;
   62     62   
        }
   63     63   
        Ok(())
   64     64   
    }
   65     65   
}
   66     66   
impl AccessDeniedError {
   67     67   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   68         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   69         -
        deserializer: &mut D,
          68  +
    pub fn deserialize(
          69  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   70     70   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   71     71   
        #[allow(unused_variables, unused_mut)]
   72     72   
        let mut builder = Self::builder();
   73     73   
        #[allow(
   74     74   
            unused_variables,
   75     75   
            unreachable_code,
   76     76   
            clippy::single_match,
   77     77   
            clippy::match_single_binding,
   78     78   
            clippy::diverging_sub_expression
   79     79   
        )]
   80         -
        deserializer.read_struct(&ACCESSDENIEDERROR_SCHEMA, (), |_, member, deser| {
          80  +
        deserializer.read_struct(&ACCESSDENIEDERROR_SCHEMA, &mut |member, deser| {
   81     81   
            match member.member_index() {
   82     82   
                Some(0) => {
   83     83   
                    builder.message = Some(deser.read_string(member)?);
   84     84   
                }
   85     85   
                Some(1) => {
   86     86   
                    builder.reason = Some(crate::types::AccessDeniedExceptionReason::from(deser.read_string(member)?.as_str()));
   87     87   
                }
   88     88   
                _ => {}
   89     89   
            }
   90     90   
            Ok(())
   91     91   
        })?;
   92     92   
        builder
   93     93   
            .build()
   94     94   
            .map_err(|e| aws_smithy_schema::serde::SerdeError::Custom { message: e.to_string() })
   95     95   
    }
   96     96   
}
          97  +
impl AccessDeniedError {
          98  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          99  +
    pub fn deserialize_with_response(
         100  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
         101  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
         102  +
        _status: u16,
         103  +
        _body: &[u8],
         104  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
         105  +
        Self::deserialize(deserializer)
         106  +
    }
         107  +
}
   97    108   
impl AccessDeniedError {
   98    109   
    /// Returns the error message.
   99    110   
    pub fn message(&self) -> ::std::option::Option<&str> {
  100    111   
        self.message.as_deref()
  101    112   
    }
  102    113   
}
  103    114   
impl ::std::fmt::Display for AccessDeniedError {
  104    115   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  105    116   
        ::std::write!(f, "AccessDeniedError [AccessDeniedException]")?;
  106    117   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_concurrent_limit_exceeded_exception.rs

@@ -1,1 +102,113 @@
   13     13   
    "com.amazonaws.ebs",
   14     14   
    "ConcurrentLimitExceededException",
   15     15   
);
   16     16   
static CONCURRENTLIMITEXCEEDEDERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   17     17   
    ::aws_smithy_schema::ShapeId::from_static(
   18     18   
        "com.amazonaws.ebs#ConcurrentLimitExceededException$Message",
   19     19   
        "com.amazonaws.ebs",
   20     20   
        "ConcurrentLimitExceededException",
   21     21   
    ),
   22     22   
    ::aws_smithy_schema::ShapeType::String,
   23         -
    "message",
          23  +
    "Message",
   24     24   
    0,
   25     25   
);
   26     26   
static CONCURRENTLIMITEXCEEDEDERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   27     27   
    CONCURRENTLIMITEXCEEDEDERROR_SCHEMA_ID,
   28     28   
    ::aws_smithy_schema::ShapeType::Structure,
   29     29   
    &[&CONCURRENTLIMITEXCEEDEDERROR_MEMBER_MESSAGE],
   30     30   
);
   31     31   
impl ConcurrentLimitExceededError {
   32     32   
    /// The schema for this shape.
   33     33   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &CONCURRENTLIMITEXCEEDEDERROR_SCHEMA;
   34     34   
}
   35     35   
impl ::aws_smithy_schema::serde::SerializableStruct for ConcurrentLimitExceededError {
   36     36   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   37     37   
    fn serialize_members(
   38     38   
        &self,
   39     39   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   40     40   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   41     41   
        if let Some(ref val) = self.message {
   42     42   
            ser.write_string(&CONCURRENTLIMITEXCEEDEDERROR_MEMBER_MESSAGE, val)?;
   43     43   
        }
   44     44   
        Ok(())
   45     45   
    }
   46     46   
}
   47     47   
impl ConcurrentLimitExceededError {
   48     48   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   49         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   50         -
        deserializer: &mut D,
          49  +
    pub fn deserialize(
          50  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   51     51   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   52     52   
        #[allow(unused_variables, unused_mut)]
   53     53   
        let mut builder = Self::builder();
   54     54   
        #[allow(
   55     55   
            unused_variables,
   56     56   
            unreachable_code,
   57     57   
            clippy::single_match,
   58     58   
            clippy::match_single_binding,
   59     59   
            clippy::diverging_sub_expression
   60     60   
        )]
   61         -
        deserializer.read_struct(&CONCURRENTLIMITEXCEEDEDERROR_SCHEMA, (), |_, member, deser| {
          61  +
        deserializer.read_struct(&CONCURRENTLIMITEXCEEDEDERROR_SCHEMA, &mut |member, deser| {
   62     62   
            match member.member_index() {
   63     63   
                Some(0) => {
   64     64   
                    builder.message = Some(deser.read_string(member)?);
   65     65   
                }
   66     66   
                _ => {}
   67     67   
            }
   68     68   
            Ok(())
   69     69   
        })?;
   70     70   
        Ok(builder.build())
   71     71   
    }
   72     72   
}
          73  +
impl ConcurrentLimitExceededError {
          74  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          75  +
    pub fn deserialize_with_response(
          76  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          77  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          78  +
        _status: u16,
          79  +
        _body: &[u8],
          80  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          81  +
        Self::deserialize(deserializer)
          82  +
    }
          83  +
}
   73     84   
impl ConcurrentLimitExceededError {
   74     85   
    /// Returns the error message.
   75     86   
    pub fn message(&self) -> ::std::option::Option<&str> {
   76     87   
        self.message.as_deref()
   77     88   
    }
   78     89   
}
   79     90   
impl ::std::fmt::Display for ConcurrentLimitExceededError {
   80     91   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
   81     92   
        ::std::write!(f, "ConcurrentLimitExceededError [ConcurrentLimitExceededException]")?;
   82     93   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_conflict_exception.rs

@@ -1,1 +95,106 @@
    6      6   
pub struct ConflictError {
    7      7   
    #[allow(missing_docs)] // documentation missing in model
    8      8   
    pub message: ::std::option::Option<::std::string::String>,
    9      9   
    pub(crate) meta: ::aws_smithy_types::error::ErrorMetadata,
   10     10   
}
   11     11   
static CONFLICTERROR_SCHEMA_ID: ::aws_smithy_schema::ShapeId =
   12     12   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ConflictException", "com.amazonaws.ebs", "ConflictException");
   13     13   
static CONFLICTERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   14     14   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ConflictException$Message", "com.amazonaws.ebs", "ConflictException"),
   15     15   
    ::aws_smithy_schema::ShapeType::String,
   16         -
    "message",
          16  +
    "Message",
   17     17   
    0,
   18     18   
);
   19     19   
static CONFLICTERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   20     20   
    CONFLICTERROR_SCHEMA_ID,
   21     21   
    ::aws_smithy_schema::ShapeType::Structure,
   22     22   
    &[&CONFLICTERROR_MEMBER_MESSAGE],
   23     23   
);
   24     24   
impl ConflictError {
   25     25   
    /// The schema for this shape.
   26     26   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &CONFLICTERROR_SCHEMA;
   27     27   
}
   28     28   
impl ::aws_smithy_schema::serde::SerializableStruct for ConflictError {
   29     29   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   30     30   
    fn serialize_members(
   31     31   
        &self,
   32     32   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   33     33   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   34     34   
        if let Some(ref val) = self.message {
   35     35   
            ser.write_string(&CONFLICTERROR_MEMBER_MESSAGE, val)?;
   36     36   
        }
   37     37   
        Ok(())
   38     38   
    }
   39     39   
}
   40     40   
impl ConflictError {
   41     41   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   42         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   43         -
        deserializer: &mut D,
          42  +
    pub fn deserialize(
          43  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   44     44   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   45     45   
        #[allow(unused_variables, unused_mut)]
   46     46   
        let mut builder = Self::builder();
   47     47   
        #[allow(
   48     48   
            unused_variables,
   49     49   
            unreachable_code,
   50     50   
            clippy::single_match,
   51     51   
            clippy::match_single_binding,
   52     52   
            clippy::diverging_sub_expression
   53     53   
        )]
   54         -
        deserializer.read_struct(&CONFLICTERROR_SCHEMA, (), |_, member, deser| {
          54  +
        deserializer.read_struct(&CONFLICTERROR_SCHEMA, &mut |member, deser| {
   55     55   
            match member.member_index() {
   56     56   
                Some(0) => {
   57     57   
                    builder.message = Some(deser.read_string(member)?);
   58     58   
                }
   59     59   
                _ => {}
   60     60   
            }
   61     61   
            Ok(())
   62     62   
        })?;
   63     63   
        Ok(builder.build())
   64     64   
    }
   65     65   
}
          66  +
impl ConflictError {
          67  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          68  +
    pub fn deserialize_with_response(
          69  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          70  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          71  +
        _status: u16,
          72  +
        _body: &[u8],
          73  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          74  +
        Self::deserialize(deserializer)
          75  +
    }
          76  +
}
   66     77   
impl ConflictError {
   67     78   
    /// Returns the error message.
   68     79   
    pub fn message(&self) -> ::std::option::Option<&str> {
   69     80   
        self.message.as_deref()
   70     81   
    }
   71     82   
}
   72     83   
impl ::std::fmt::Display for ConflictError {
   73     84   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
   74     85   
        ::std::write!(f, "ConflictError [ConflictException]")?;
   75     86   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_internal_server_exception.rs

@@ -1,1 +102,113 @@
   13     13   
    "com.amazonaws.ebs",
   14     14   
    "InternalServerException",
   15     15   
);
   16     16   
static INTERNALSERVERERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   17     17   
    ::aws_smithy_schema::ShapeId::from_static(
   18     18   
        "com.amazonaws.ebs#InternalServerException$Message",
   19     19   
        "com.amazonaws.ebs",
   20     20   
        "InternalServerException",
   21     21   
    ),
   22     22   
    ::aws_smithy_schema::ShapeType::String,
   23         -
    "message",
          23  +
    "Message",
   24     24   
    0,
   25     25   
);
   26     26   
static INTERNALSERVERERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   27     27   
    INTERNALSERVERERROR_SCHEMA_ID,
   28     28   
    ::aws_smithy_schema::ShapeType::Structure,
   29     29   
    &[&INTERNALSERVERERROR_MEMBER_MESSAGE],
   30     30   
);
   31     31   
impl InternalServerError {
   32     32   
    /// The schema for this shape.
   33     33   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &INTERNALSERVERERROR_SCHEMA;
   34     34   
}
   35     35   
impl ::aws_smithy_schema::serde::SerializableStruct for InternalServerError {
   36     36   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   37     37   
    fn serialize_members(
   38     38   
        &self,
   39     39   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   40     40   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   41     41   
        if let Some(ref val) = self.message {
   42     42   
            ser.write_string(&INTERNALSERVERERROR_MEMBER_MESSAGE, val)?;
   43     43   
        }
   44     44   
        Ok(())
   45     45   
    }
   46     46   
}
   47     47   
impl InternalServerError {
   48     48   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   49         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   50         -
        deserializer: &mut D,
          49  +
    pub fn deserialize(
          50  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   51     51   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   52     52   
        #[allow(unused_variables, unused_mut)]
   53     53   
        let mut builder = Self::builder();
   54     54   
        #[allow(
   55     55   
            unused_variables,
   56     56   
            unreachable_code,
   57     57   
            clippy::single_match,
   58     58   
            clippy::match_single_binding,
   59     59   
            clippy::diverging_sub_expression
   60     60   
        )]
   61         -
        deserializer.read_struct(&INTERNALSERVERERROR_SCHEMA, (), |_, member, deser| {
          61  +
        deserializer.read_struct(&INTERNALSERVERERROR_SCHEMA, &mut |member, deser| {
   62     62   
            match member.member_index() {
   63     63   
                Some(0) => {
   64     64   
                    builder.message = Some(deser.read_string(member)?);
   65     65   
                }
   66     66   
                _ => {}
   67     67   
            }
   68     68   
            Ok(())
   69     69   
        })?;
   70     70   
        Ok(builder.build())
   71     71   
    }
   72     72   
}
          73  +
impl InternalServerError {
          74  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          75  +
    pub fn deserialize_with_response(
          76  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          77  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          78  +
        _status: u16,
          79  +
        _body: &[u8],
          80  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          81  +
        Self::deserialize(deserializer)
          82  +
    }
          83  +
}
   73     84   
impl InternalServerError {
   74     85   
    /// Returns the error message.
   75     86   
    pub fn message(&self) -> ::std::option::Option<&str> {
   76     87   
        self.message.as_deref()
   77     88   
    }
   78     89   
}
   79     90   
impl ::std::fmt::Display for InternalServerError {
   80     91   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
   81     92   
        ::std::write!(f, "InternalServerError [InternalServerException]")?;
   82     93   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_request_throttled_exception.rs

@@ -1,1 +126,137 @@
   21     21   
    "com.amazonaws.ebs",
   22     22   
    "RequestThrottledException",
   23     23   
);
   24     24   
static REQUESTTHROTTLEDERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   25     25   
    ::aws_smithy_schema::ShapeId::from_static(
   26     26   
        "com.amazonaws.ebs#RequestThrottledException$Message",
   27     27   
        "com.amazonaws.ebs",
   28     28   
        "RequestThrottledException",
   29     29   
    ),
   30     30   
    ::aws_smithy_schema::ShapeType::String,
   31         -
    "message",
          31  +
    "Message",
   32     32   
    0,
   33     33   
);
   34     34   
static REQUESTTHROTTLEDERROR_MEMBER_REASON: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   35     35   
    ::aws_smithy_schema::ShapeId::from_static(
   36     36   
        "com.amazonaws.ebs#RequestThrottledException$Reason",
   37     37   
        "com.amazonaws.ebs",
   38     38   
        "RequestThrottledException",
   39     39   
    ),
   40     40   
    ::aws_smithy_schema::ShapeType::String,
   41         -
    "reason",
          41  +
    "Reason",
   42     42   
    1,
   43     43   
);
   44     44   
static REQUESTTHROTTLEDERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   45     45   
    REQUESTTHROTTLEDERROR_SCHEMA_ID,
   46     46   
    ::aws_smithy_schema::ShapeType::Structure,
   47     47   
    &[&REQUESTTHROTTLEDERROR_MEMBER_MESSAGE, &REQUESTTHROTTLEDERROR_MEMBER_REASON],
   48     48   
);
   49     49   
impl RequestThrottledError {
   50     50   
    /// The schema for this shape.
   51     51   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &REQUESTTHROTTLEDERROR_SCHEMA;
   52     52   
}
   53     53   
impl ::aws_smithy_schema::serde::SerializableStruct for RequestThrottledError {
   54     54   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   55     55   
    fn serialize_members(
   56     56   
        &self,
   57     57   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   58     58   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   59     59   
        if let Some(ref val) = self.message {
   60     60   
            ser.write_string(&REQUESTTHROTTLEDERROR_MEMBER_MESSAGE, val)?;
   61     61   
        }
   62     62   
        if let Some(ref val) = self.reason {
   63     63   
            ser.write_string(&REQUESTTHROTTLEDERROR_MEMBER_REASON, val.as_str())?;
   64     64   
        }
   65     65   
        Ok(())
   66     66   
    }
   67     67   
}
   68     68   
impl RequestThrottledError {
   69     69   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   70         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   71         -
        deserializer: &mut D,
          70  +
    pub fn deserialize(
          71  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   72     72   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   73     73   
        #[allow(unused_variables, unused_mut)]
   74     74   
        let mut builder = Self::builder();
   75     75   
        #[allow(
   76     76   
            unused_variables,
   77     77   
            unreachable_code,
   78     78   
            clippy::single_match,
   79     79   
            clippy::match_single_binding,
   80     80   
            clippy::diverging_sub_expression
   81     81   
        )]
   82         -
        deserializer.read_struct(&REQUESTTHROTTLEDERROR_SCHEMA, (), |_, member, deser| {
          82  +
        deserializer.read_struct(&REQUESTTHROTTLEDERROR_SCHEMA, &mut |member, deser| {
   83     83   
            match member.member_index() {
   84     84   
                Some(0) => {
   85     85   
                    builder.message = Some(deser.read_string(member)?);
   86     86   
                }
   87     87   
                Some(1) => {
   88     88   
                    builder.reason = Some(crate::types::RequestThrottledExceptionReason::from(deser.read_string(member)?.as_str()));
   89     89   
                }
   90     90   
                _ => {}
   91     91   
            }
   92     92   
            Ok(())
   93     93   
        })?;
   94     94   
        Ok(builder.build())
   95     95   
    }
   96     96   
}
          97  +
impl RequestThrottledError {
          98  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          99  +
    pub fn deserialize_with_response(
         100  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
         101  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
         102  +
        _status: u16,
         103  +
        _body: &[u8],
         104  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
         105  +
        Self::deserialize(deserializer)
         106  +
    }
         107  +
}
   97    108   
impl RequestThrottledError {
   98    109   
    /// Returns the error message.
   99    110   
    pub fn message(&self) -> ::std::option::Option<&str> {
  100    111   
        self.message.as_deref()
  101    112   
    }
  102    113   
}
  103    114   
impl ::std::fmt::Display for RequestThrottledError {
  104    115   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  105    116   
        ::std::write!(f, "RequestThrottledError [RequestThrottledException]")?;
  106    117   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_resource_not_found_exception.rs

@@ -1,1 +126,137 @@
   21     21   
    "com.amazonaws.ebs",
   22     22   
    "ResourceNotFoundException",
   23     23   
);
   24     24   
static RESOURCENOTFOUNDERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   25     25   
    ::aws_smithy_schema::ShapeId::from_static(
   26     26   
        "com.amazonaws.ebs#ResourceNotFoundException$Message",
   27     27   
        "com.amazonaws.ebs",
   28     28   
        "ResourceNotFoundException",
   29     29   
    ),
   30     30   
    ::aws_smithy_schema::ShapeType::String,
   31         -
    "message",
          31  +
    "Message",
   32     32   
    0,
   33     33   
);
   34     34   
static RESOURCENOTFOUNDERROR_MEMBER_REASON: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   35     35   
    ::aws_smithy_schema::ShapeId::from_static(
   36     36   
        "com.amazonaws.ebs#ResourceNotFoundException$Reason",
   37     37   
        "com.amazonaws.ebs",
   38     38   
        "ResourceNotFoundException",
   39     39   
    ),
   40     40   
    ::aws_smithy_schema::ShapeType::String,
   41         -
    "reason",
          41  +
    "Reason",
   42     42   
    1,
   43     43   
);
   44     44   
static RESOURCENOTFOUNDERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   45     45   
    RESOURCENOTFOUNDERROR_SCHEMA_ID,
   46     46   
    ::aws_smithy_schema::ShapeType::Structure,
   47     47   
    &[&RESOURCENOTFOUNDERROR_MEMBER_MESSAGE, &RESOURCENOTFOUNDERROR_MEMBER_REASON],
   48     48   
);
   49     49   
impl ResourceNotFoundError {
   50     50   
    /// The schema for this shape.
   51     51   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &RESOURCENOTFOUNDERROR_SCHEMA;
   52     52   
}
   53     53   
impl ::aws_smithy_schema::serde::SerializableStruct for ResourceNotFoundError {
   54     54   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   55     55   
    fn serialize_members(
   56     56   
        &self,
   57     57   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   58     58   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   59     59   
        if let Some(ref val) = self.message {
   60     60   
            ser.write_string(&RESOURCENOTFOUNDERROR_MEMBER_MESSAGE, val)?;
   61     61   
        }
   62     62   
        if let Some(ref val) = self.reason {
   63     63   
            ser.write_string(&RESOURCENOTFOUNDERROR_MEMBER_REASON, val.as_str())?;
   64     64   
        }
   65     65   
        Ok(())
   66     66   
    }
   67     67   
}
   68     68   
impl ResourceNotFoundError {
   69     69   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   70         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   71         -
        deserializer: &mut D,
          70  +
    pub fn deserialize(
          71  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   72     72   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   73     73   
        #[allow(unused_variables, unused_mut)]
   74     74   
        let mut builder = Self::builder();
   75     75   
        #[allow(
   76     76   
            unused_variables,
   77     77   
            unreachable_code,
   78     78   
            clippy::single_match,
   79     79   
            clippy::match_single_binding,
   80     80   
            clippy::diverging_sub_expression
   81     81   
        )]
   82         -
        deserializer.read_struct(&RESOURCENOTFOUNDERROR_SCHEMA, (), |_, member, deser| {
          82  +
        deserializer.read_struct(&RESOURCENOTFOUNDERROR_SCHEMA, &mut |member, deser| {
   83     83   
            match member.member_index() {
   84     84   
                Some(0) => {
   85     85   
                    builder.message = Some(deser.read_string(member)?);
   86     86   
                }
   87     87   
                Some(1) => {
   88     88   
                    builder.reason = Some(crate::types::ResourceNotFoundExceptionReason::from(deser.read_string(member)?.as_str()));
   89     89   
                }
   90     90   
                _ => {}
   91     91   
            }
   92     92   
            Ok(())
   93     93   
        })?;
   94     94   
        Ok(builder.build())
   95     95   
    }
   96     96   
}
          97  +
impl ResourceNotFoundError {
          98  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          99  +
    pub fn deserialize_with_response(
         100  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
         101  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
         102  +
        _status: u16,
         103  +
        _body: &[u8],
         104  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
         105  +
        Self::deserialize(deserializer)
         106  +
    }
         107  +
}
   97    108   
impl ResourceNotFoundError {
   98    109   
    /// Returns the error message.
   99    110   
    pub fn message(&self) -> ::std::option::Option<&str> {
  100    111   
        self.message.as_deref()
  101    112   
    }
  102    113   
}
  103    114   
impl ::std::fmt::Display for ResourceNotFoundError {
  104    115   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  105    116   
        ::std::write!(f, "ResourceNotFoundError [ResourceNotFoundException]")?;
  106    117   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_service_quota_exceeded_exception.rs

@@ -1,1 +128,139 @@
   21     21   
    "com.amazonaws.ebs",
   22     22   
    "ServiceQuotaExceededException",
   23     23   
);
   24     24   
static SERVICEQUOTAEXCEEDEDERROR_MEMBER_REASON: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   25     25   
    ::aws_smithy_schema::ShapeId::from_static(
   26     26   
        "com.amazonaws.ebs#ServiceQuotaExceededException$Reason",
   27     27   
        "com.amazonaws.ebs",
   28     28   
        "ServiceQuotaExceededException",
   29     29   
    ),
   30     30   
    ::aws_smithy_schema::ShapeType::String,
   31         -
    "reason",
          31  +
    "Reason",
   32     32   
    0,
   33     33   
);
   34     34   
static SERVICEQUOTAEXCEEDEDERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   35     35   
    ::aws_smithy_schema::ShapeId::from_static(
   36     36   
        "com.amazonaws.ebs#ServiceQuotaExceededException$Message",
   37     37   
        "com.amazonaws.ebs",
   38     38   
        "ServiceQuotaExceededException",
   39     39   
    ),
   40     40   
    ::aws_smithy_schema::ShapeType::String,
   41         -
    "message",
          41  +
    "Message",
   42     42   
    1,
   43     43   
);
   44     44   
static SERVICEQUOTAEXCEEDEDERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   45     45   
    SERVICEQUOTAEXCEEDEDERROR_SCHEMA_ID,
   46     46   
    ::aws_smithy_schema::ShapeType::Structure,
   47     47   
    &[&SERVICEQUOTAEXCEEDEDERROR_MEMBER_REASON, &SERVICEQUOTAEXCEEDEDERROR_MEMBER_MESSAGE],
   48     48   
);
   49     49   
impl ServiceQuotaExceededError {
   50     50   
    /// The schema for this shape.
   51     51   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &SERVICEQUOTAEXCEEDEDERROR_SCHEMA;
   52     52   
}
   53     53   
impl ::aws_smithy_schema::serde::SerializableStruct for ServiceQuotaExceededError {
   54     54   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   55     55   
    fn serialize_members(
   56     56   
        &self,
   57     57   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   58     58   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   59     59   
        if let Some(ref val) = self.reason {
   60     60   
            ser.write_string(&SERVICEQUOTAEXCEEDEDERROR_MEMBER_REASON, val.as_str())?;
   61     61   
        }
   62     62   
        if let Some(ref val) = self.message {
   63     63   
            ser.write_string(&SERVICEQUOTAEXCEEDEDERROR_MEMBER_MESSAGE, val)?;
   64     64   
        }
   65     65   
        Ok(())
   66     66   
    }
   67     67   
}
   68     68   
impl ServiceQuotaExceededError {
   69     69   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   70         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   71         -
        deserializer: &mut D,
          70  +
    pub fn deserialize(
          71  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   72     72   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   73     73   
        #[allow(unused_variables, unused_mut)]
   74     74   
        let mut builder = Self::builder();
   75     75   
        #[allow(
   76     76   
            unused_variables,
   77     77   
            unreachable_code,
   78     78   
            clippy::single_match,
   79     79   
            clippy::match_single_binding,
   80     80   
            clippy::diverging_sub_expression
   81     81   
        )]
   82         -
        deserializer.read_struct(&SERVICEQUOTAEXCEEDEDERROR_SCHEMA, (), |_, member, deser| {
          82  +
        deserializer.read_struct(&SERVICEQUOTAEXCEEDEDERROR_SCHEMA, &mut |member, deser| {
   83     83   
            match member.member_index() {
   84     84   
                Some(0) => {
   85     85   
                    builder.reason = Some(crate::types::ServiceQuotaExceededExceptionReason::from(
   86     86   
                        deser.read_string(member)?.as_str(),
   87     87   
                    ));
   88     88   
                }
   89     89   
                Some(1) => {
   90     90   
                    builder.message = Some(deser.read_string(member)?);
   91     91   
                }
   92     92   
                _ => {}
   93     93   
            }
   94     94   
            Ok(())
   95     95   
        })?;
   96     96   
        Ok(builder.build())
   97     97   
    }
   98     98   
}
          99  +
impl ServiceQuotaExceededError {
         100  +
    /// Deserializes this structure from a body deserializer and HTTP response.
         101  +
    pub fn deserialize_with_response(
         102  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
         103  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
         104  +
        _status: u16,
         105  +
        _body: &[u8],
         106  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
         107  +
        Self::deserialize(deserializer)
         108  +
    }
         109  +
}
   99    110   
impl ServiceQuotaExceededError {
  100    111   
    /// Returns the error message.
  101    112   
    pub fn message(&self) -> ::std::option::Option<&str> {
  102    113   
        self.message.as_deref()
  103    114   
    }
  104    115   
}
  105    116   
impl ::std::fmt::Display for ServiceQuotaExceededError {
  106    117   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
  107    118   
        ::std::write!(f, "ServiceQuotaExceededError [ServiceQuotaExceededException]")?;
  108    119   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ebs/rust-client-codegen/src/types/error/_validation_exception.rs

@@ -1,1 +119,130 @@
   18     18   
}
   19     19   
static VALIDATIONERROR_SCHEMA_ID: ::aws_smithy_schema::ShapeId =
   20     20   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ValidationException", "com.amazonaws.ebs", "ValidationException");
   21     21   
static VALIDATIONERROR_MEMBER_MESSAGE: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   22     22   
    ::aws_smithy_schema::ShapeId::from_static(
   23     23   
        "com.amazonaws.ebs#ValidationException$Message",
   24     24   
        "com.amazonaws.ebs",
   25     25   
        "ValidationException",
   26     26   
    ),
   27     27   
    ::aws_smithy_schema::ShapeType::String,
   28         -
    "message",
          28  +
    "Message",
   29     29   
    0,
   30     30   
);
   31     31   
static VALIDATIONERROR_MEMBER_REASON: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   32     32   
    ::aws_smithy_schema::ShapeId::from_static("com.amazonaws.ebs#ValidationException$Reason", "com.amazonaws.ebs", "ValidationException"),
   33     33   
    ::aws_smithy_schema::ShapeType::String,
   34         -
    "reason",
          34  +
    "Reason",
   35     35   
    1,
   36     36   
);
   37     37   
static VALIDATIONERROR_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   38     38   
    VALIDATIONERROR_SCHEMA_ID,
   39     39   
    ::aws_smithy_schema::ShapeType::Structure,
   40     40   
    &[&VALIDATIONERROR_MEMBER_MESSAGE, &VALIDATIONERROR_MEMBER_REASON],
   41     41   
);
   42     42   
impl ValidationError {
   43     43   
    /// The schema for this shape.
   44     44   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &VALIDATIONERROR_SCHEMA;
   45     45   
}
   46     46   
impl ::aws_smithy_schema::serde::SerializableStruct for ValidationError {
   47     47   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   48     48   
    fn serialize_members(
   49     49   
        &self,
   50     50   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   51     51   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   52     52   
        if let Some(ref val) = self.message {
   53     53   
            ser.write_string(&VALIDATIONERROR_MEMBER_MESSAGE, val)?;
   54     54   
        }
   55     55   
        if let Some(ref val) = self.reason {
   56     56   
            ser.write_string(&VALIDATIONERROR_MEMBER_REASON, val.as_str())?;
   57     57   
        }
   58     58   
        Ok(())
   59     59   
    }
   60     60   
}
   61     61   
impl ValidationError {
   62     62   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   63         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   64         -
        deserializer: &mut D,
          63  +
    pub fn deserialize(
          64  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   65     65   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   66     66   
        #[allow(unused_variables, unused_mut)]
   67     67   
        let mut builder = Self::builder();
   68     68   
        #[allow(
   69     69   
            unused_variables,
   70     70   
            unreachable_code,
   71     71   
            clippy::single_match,
   72     72   
            clippy::match_single_binding,
   73     73   
            clippy::diverging_sub_expression
   74     74   
        )]
   75         -
        deserializer.read_struct(&VALIDATIONERROR_SCHEMA, (), |_, member, deser| {
          75  +
        deserializer.read_struct(&VALIDATIONERROR_SCHEMA, &mut |member, deser| {
   76     76   
            match member.member_index() {
   77     77   
                Some(0) => {
   78     78   
                    builder.message = Some(deser.read_string(member)?);
   79     79   
                }
   80     80   
                Some(1) => {
   81     81   
                    builder.reason = Some(crate::types::ValidationExceptionReason::from(deser.read_string(member)?.as_str()));
   82     82   
                }
   83     83   
                _ => {}
   84     84   
            }
   85     85   
            Ok(())
   86     86   
        })?;
   87     87   
        Ok(builder.build())
   88     88   
    }
   89     89   
}
          90  +
impl ValidationError {
          91  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          92  +
    pub fn deserialize_with_response(
          93  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          94  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          95  +
        _status: u16,
          96  +
        _body: &[u8],
          97  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          98  +
        Self::deserialize(deserializer)
          99  +
    }
         100  +
}
   90    101   
impl ValidationError {
   91    102   
    /// Returns the error message.
   92    103   
    pub fn message(&self) -> ::std::option::Option<&str> {
   93    104   
        self.message.as_deref()
   94    105   
    }
   95    106   
}
   96    107   
impl ::std::fmt::Display for ValidationError {
   97    108   
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
   98    109   
        ::std::write!(f, "ValidationError [ValidationException]")?;
   99    110   
        if let ::std::option::Option::Some(inner_1) = &self.message {

tmp-codegen-diff/codegen-client-test/ec2_query/rust-client-codegen/src/operation/datetime_offsets.rs

@@ -1,1 +40,44 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
/// Orchestration and serialization glue logic for `DatetimeOffsets`.
    3      3   
#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
    4      4   
#[non_exhaustive]
    5      5   
pub struct DatetimeOffsets;
    6      6   
impl DatetimeOffsets {
    7      7   
    /// Creates a new `DatetimeOffsets`
    8      8   
    pub fn new() -> Self {
    9      9   
        Self
   10     10   
    }
          11  +
    /// The schema for this operation's input shape.
          12  +
    pub const INPUT_SCHEMA: &'static ::aws_smithy_schema::Schema = crate::operation::datetime_offsets::DatetimeOffsetsInput::SCHEMA;
          13  +
    /// The schema for this operation's output shape.
          14  +
    pub const OUTPUT_SCHEMA: &'static ::aws_smithy_schema::Schema = crate::operation::datetime_offsets::DatetimeOffsetsOutput::SCHEMA;
   11     15   
    pub(crate) async fn orchestrate(
   12     16   
        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
   13     17   
        input: crate::operation::datetime_offsets::DatetimeOffsetsInput,
   14     18   
    ) -> ::std::result::Result<
   15     19   
        crate::operation::datetime_offsets::DatetimeOffsetsOutput,
   16     20   
        ::aws_smithy_runtime_api::client::result::SdkError<
   17     21   
            crate::operation::datetime_offsets::DatetimeOffsetsError,
   18     22   
            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
   19     23   
        >,
   20     24   
    > {
@@ -104,108 +166,171 @@
  124    128   
                crate::operation::datetime_offsets::DatetimeOffsetsError,
  125    129   
            >::new());
  126    130   
  127    131   
        ::std::borrow::Cow::Owned(rcb)
  128    132   
    }
  129    133   
}
  130    134   
  131    135   
#[derive(Debug)]
  132    136   
struct DatetimeOffsetsResponseDeserializer;
  133    137   
impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for DatetimeOffsetsResponseDeserializer {
  134         -
    fn deserialize_nonstreaming(
         138  +
    fn deserialize_nonstreaming_with_config(
  135    139   
        &self,
  136    140   
        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
         141  +
        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
  137    142   
    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
  138    143   
        let (success, status) = (response.status().is_success(), response.status().as_u16());
  139    144   
        let headers = response.headers();
  140    145   
        let body = response.body().bytes().expect("body loaded");
  141    146   
        #[allow(unused_mut)]
  142    147   
        let mut force_error = false;
  143    148   
  144    149   
        let parse_result = if !success && status != 200 || force_error {
  145    150   
            crate::protocol_serde::shape_datetime_offsets::de_datetime_offsets_http_error(status, headers, body)
  146    151   
        } else {
@@ -241,246 +343,356 @@
  261    266   
            .expect("the config must have a deserializer");
  262    267   
  263    268   
        let parsed = de.deserialize_streaming(&mut http_response);
  264    269   
        let parsed = parsed.unwrap_or_else(|| {
  265    270   
            let http_response = http_response.map(|body| {
  266    271   
                ::aws_smithy_types::body::SdkBody::from(::bytes::Bytes::copy_from_slice(&::aws_smithy_protocol_test::decode_body_data(
  267    272   
                    body.bytes().unwrap(),
  268    273   
                    ::aws_smithy_protocol_test::MediaType::from("application/xml"),
  269    274   
                )))
  270    275   
            });
  271         -
            de.deserialize_nonstreaming(&http_response)
         276  +
            // Build a config bag with the protocol for schema-based deserialization
         277  +
            #[allow(unused_mut)]
         278  +
            let mut test_cfg = ::aws_smithy_types::config_bag::ConfigBag::base();
         279  +
         280  +
            de.deserialize_nonstreaming_with_config(&http_response, &test_cfg)
  272    281   
        });
  273    282   
        let parsed = parsed
  274    283   
            .expect("should be successful response")
  275    284   
            .downcast::<crate::operation::datetime_offsets::DatetimeOffsetsOutput>()
  276    285   
            .unwrap();
  277    286   
        ::pretty_assertions::assert_eq!(parsed.datetime, expected_output.datetime, "Unexpected value for `datetime`");
  278    287   
    }
  279    288   
  280    289   
    /// Ensures that clients can correctly parse datetime (timestamps) with offsets
  281    290   
    /// Test ID: Ec2QueryDateTimeWithPositiveOffset
  282    291   
    #[::tokio::test]
  283    292   
    #[::tracing_test::traced_test]
  284    293   
    async fn ec2_query_date_time_with_positive_offset_response() {
  285    294   
        let expected_output = crate::operation::datetime_offsets::DatetimeOffsetsOutput::builder()
  286    295   
            .set_datetime(::std::option::Option::Some(::aws_smithy_types::DateTime::from_fractional_secs(
  287    296   
                1576540098, 0_f64,
  288    297   
            )))
  289    298   
            .build();
  290    299   
        let mut http_response = ::aws_smithy_runtime_api::http::Response::try_from(::http_1x::response::Builder::new()
  291    300   
        .header("Content-Type", "text/xml;charset=UTF-8")
  292    301   
        .status(200)
  293    302   
                    .body(::aws_smithy_types::body::SdkBody::from("<DatetimeOffsetsResponse xmlns=\"https://example.com/\">\n    <datetime>2019-12-17T00:48:18+01:00</datetime>\n    <requestId>requestid</requestId>\n</DatetimeOffsetsResponse>\n"))
  294    303   
                    .unwrap()
  295    304   
                    ).unwrap();
  296    305   
        use ::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugin;
  297    306   
        use ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse;
  298    307   
  299    308   
        let op = crate::operation::datetime_offsets::DatetimeOffsets::new();
  300    309   
        let config = op.config().expect("the operation has config");
  301    310   
        let de = config
  302    311   
            .load::<::aws_smithy_runtime_api::client::ser_de::SharedResponseDeserializer>()
  303    312   
            .expect("the config must have a deserializer");
  304    313   
  305    314   
        let parsed = de.deserialize_streaming(&mut http_response);
  306    315   
        let parsed = parsed.unwrap_or_else(|| {
  307    316   
            let http_response = http_response.map(|body| {
  308    317   
                ::aws_smithy_types::body::SdkBody::from(::bytes::Bytes::copy_from_slice(&::aws_smithy_protocol_test::decode_body_data(
  309    318   
                    body.bytes().unwrap(),
  310    319   
                    ::aws_smithy_protocol_test::MediaType::from("application/xml"),
  311    320   
                )))
  312    321   
            });
  313         -
            de.deserialize_nonstreaming(&http_response)
         322  +
            // Build a config bag with the protocol for schema-based deserialization
         323  +
            #[allow(unused_mut)]
         324  +
            let mut test_cfg = ::aws_smithy_types::config_bag::ConfigBag::base();
         325  +
         326  +
            de.deserialize_nonstreaming_with_config(&http_response, &test_cfg)
  314    327   
        });
  315    328   
        let parsed = parsed
  316    329   
            .expect("should be successful response")
  317    330   
            .downcast::<crate::operation::datetime_offsets::DatetimeOffsetsOutput>()
  318    331   
            .unwrap();
  319    332   
        ::pretty_assertions::assert_eq!(parsed.datetime, expected_output.datetime, "Unexpected value for `datetime`");
  320    333   
    }
  321    334   
}
  322    335   
  323    336   
/// Error type for the `DatetimeOffsetsError` operation.

tmp-codegen-diff/codegen-client-test/ec2_query/rust-client-codegen/src/operation/datetime_offsets/_datetime_offsets_input.rs

@@ -1,1 +69,82 @@
   18     18   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   19     19   
    fn serialize_members(
   20     20   
        &self,
   21     21   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   22     22   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   23     23   
        Ok(())
   24     24   
    }
   25     25   
}
   26     26   
impl DatetimeOffsetsInput {
   27     27   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   28         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   29         -
        deserializer: &mut D,
          28  +
    pub fn deserialize(
          29  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   30     30   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   31     31   
        #[allow(unused_variables, unused_mut)]
   32     32   
        let mut builder = Self::builder();
   33     33   
        #[allow(
   34     34   
            unused_variables,
   35     35   
            unreachable_code,
   36     36   
            clippy::single_match,
   37     37   
            clippy::match_single_binding,
   38     38   
            clippy::diverging_sub_expression
   39     39   
        )]
   40         -
        deserializer.read_struct(&DATETIMEOFFSETSINPUT_SCHEMA, (), |_, member, deser| {
          40  +
        deserializer.read_struct(&DATETIMEOFFSETSINPUT_SCHEMA, &mut |member, deser| {
   41     41   
            match member.member_index() {
   42     42   
                _ => {}
   43     43   
            }
   44     44   
            Ok(())
   45     45   
        })?;
   46     46   
        builder
   47     47   
            .build()
   48     48   
            .map_err(|e| aws_smithy_schema::serde::SerdeError::Custom { message: e.to_string() })
   49     49   
    }
   50     50   
}
          51  +
impl DatetimeOffsetsInput {
          52  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          53  +
    pub fn deserialize_with_response(
          54  +
        _deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          55  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          56  +
        _status: u16,
          57  +
        _body: &[u8],
          58  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          59  +
        Self::builder()
          60  +
            .build()
          61  +
            .map_err(|e| aws_smithy_schema::serde::SerdeError::Custom { message: e.to_string() })
          62  +
    }
          63  +
}
   51     64   
impl DatetimeOffsetsInput {
   52     65   
    /// Creates a new builder-style object to manufacture [`DatetimeOffsetsInput`](crate::operation::datetime_offsets::DatetimeOffsetsInput).
   53     66   
    pub fn builder() -> crate::operation::datetime_offsets::builders::DatetimeOffsetsInputBuilder {
   54     67   
        crate::operation::datetime_offsets::builders::DatetimeOffsetsInputBuilder::default()
   55     68   
    }
   56     69   
}
   57     70   
   58     71   
/// A builder for [`DatetimeOffsetsInput`](crate::operation::datetime_offsets::DatetimeOffsetsInput).
   59     72   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
   60     73   
#[non_exhaustive]

tmp-codegen-diff/codegen-client-test/ec2_query/rust-client-codegen/src/operation/datetime_offsets/_datetime_offsets_output.rs

@@ -1,1 +106,118 @@
   19     19   
);
   20     20   
static DATETIMEOFFSETSOUTPUT_MEMBER_DATETIME: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_member(
   21     21   
    ::aws_smithy_schema::ShapeId::from_static(
   22     22   
        "aws.protocoltests.ec2.synthetic#DatetimeOffsetsOutput$datetime",
   23     23   
        "aws.protocoltests.ec2.synthetic",
   24     24   
        "DatetimeOffsetsOutput",
   25     25   
    ),
   26     26   
    ::aws_smithy_schema::ShapeType::Timestamp,
   27     27   
    "datetime",
   28     28   
    0,
   29         -
);
          29  +
)
          30  +
.with_timestamp_format(aws_smithy_schema::traits::TimestampFormat::DateTime);
   30     31   
static DATETIMEOFFSETSOUTPUT_SCHEMA: ::aws_smithy_schema::Schema = ::aws_smithy_schema::Schema::new_struct(
   31     32   
    DATETIMEOFFSETSOUTPUT_SCHEMA_ID,
   32     33   
    ::aws_smithy_schema::ShapeType::Structure,
   33     34   
    &[&DATETIMEOFFSETSOUTPUT_MEMBER_DATETIME],
   34     35   
);
   35     36   
impl DatetimeOffsetsOutput {
   36     37   
    /// The schema for this shape.
   37     38   
    pub const SCHEMA: &'static ::aws_smithy_schema::Schema = &DATETIMEOFFSETSOUTPUT_SCHEMA;
   38     39   
}
   39     40   
impl ::aws_smithy_schema::serde::SerializableStruct for DatetimeOffsetsOutput {
   40     41   
    #[allow(unused_variables, clippy::diverging_sub_expression)]
   41     42   
    fn serialize_members(
   42     43   
        &self,
   43     44   
        ser: &mut dyn ::aws_smithy_schema::serde::ShapeSerializer,
   44     45   
    ) -> ::std::result::Result<(), ::aws_smithy_schema::serde::SerdeError> {
   45     46   
        if let Some(ref val) = self.datetime {
   46     47   
            ser.write_timestamp(&DATETIMEOFFSETSOUTPUT_MEMBER_DATETIME, val)?;
   47     48   
        }
   48     49   
        Ok(())
   49     50   
    }
   50     51   
}
   51     52   
impl DatetimeOffsetsOutput {
   52     53   
    /// Deserializes this structure from a [`ShapeDeserializer`].
   53         -
    pub fn deserialize<D: ::aws_smithy_schema::serde::ShapeDeserializer>(
   54         -
        deserializer: &mut D,
          54  +
    pub fn deserialize(
          55  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
   55     56   
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
   56     57   
        #[allow(unused_variables, unused_mut)]
   57     58   
        let mut builder = Self::builder();
   58     59   
        #[allow(
   59     60   
            unused_variables,
   60     61   
            unreachable_code,
   61     62   
            clippy::single_match,
   62     63   
            clippy::match_single_binding,
   63     64   
            clippy::diverging_sub_expression
   64     65   
        )]
   65         -
        deserializer.read_struct(&DATETIMEOFFSETSOUTPUT_SCHEMA, (), |_, member, deser| {
          66  +
        deserializer.read_struct(&DATETIMEOFFSETSOUTPUT_SCHEMA, &mut |member, deser| {
   66     67   
            match member.member_index() {
   67     68   
                Some(0) => {
   68     69   
                    builder.datetime = Some(deser.read_timestamp(member)?);
   69     70   
                }
   70     71   
                _ => {}
   71     72   
            }
   72     73   
            Ok(())
   73     74   
        })?;
   74     75   
        Ok(builder.build())
   75     76   
    }
   76     77   
}
          78  +
impl DatetimeOffsetsOutput {
          79  +
    /// Deserializes this structure from a body deserializer and HTTP response.
          80  +
    pub fn deserialize_with_response(
          81  +
        deserializer: &mut dyn ::aws_smithy_schema::serde::ShapeDeserializer,
          82  +
        _headers: &::aws_smithy_runtime_api::http::Headers,
          83  +
        _status: u16,
          84  +
        _body: &[u8],
          85  +
    ) -> ::std::result::Result<Self, ::aws_smithy_schema::serde::SerdeError> {
          86  +
        Self::deserialize(deserializer)
          87  +
    }
          88  +
}
   77     89   
impl DatetimeOffsetsOutput {
   78     90   
    /// Creates a new builder-style object to manufacture [`DatetimeOffsetsOutput`](crate::operation::datetime_offsets::DatetimeOffsetsOutput).
   79     91   
    pub fn builder() -> crate::operation::datetime_offsets::builders::DatetimeOffsetsOutputBuilder {
   80     92   
        crate::operation::datetime_offsets::builders::DatetimeOffsetsOutputBuilder::default()
   81     93   
    }
   82     94   
}
   83     95   
   84     96   
/// A builder for [`DatetimeOffsetsOutput`](crate::operation::datetime_offsets::DatetimeOffsetsOutput).
   85     97   
#[derive(::std::clone::Clone, ::std::cmp::PartialEq, ::std::default::Default, ::std::fmt::Debug)]
   86     98   
#[non_exhaustive]

tmp-codegen-diff/codegen-client-test/ec2_query/rust-client-codegen/src/operation/empty_input_and_empty_output.rs

@@ -1,1 +40,46 @@
    1      1   
// Code generated by software.amazon.smithy.rust.codegen.smithy-rs. DO NOT EDIT.
    2      2   
/// Orchestration and serialization glue logic for `EmptyInputAndEmptyOutput`.
    3      3   
#[derive(::std::clone::Clone, ::std::default::Default, ::std::fmt::Debug)]
    4      4   
#[non_exhaustive]
    5      5   
pub struct EmptyInputAndEmptyOutput;
    6      6   
impl EmptyInputAndEmptyOutput {
    7      7   
    /// Creates a new `EmptyInputAndEmptyOutput`
    8      8   
    pub fn new() -> Self {
    9      9   
        Self
   10     10   
    }
          11  +
    /// The schema for this operation's input shape.
          12  +
    pub const INPUT_SCHEMA: &'static ::aws_smithy_schema::Schema =
          13  +
        crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputInput::SCHEMA;
          14  +
    /// The schema for this operation's output shape.
          15  +
    pub const OUTPUT_SCHEMA: &'static ::aws_smithy_schema::Schema =
          16  +
        crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputOutput::SCHEMA;
   11     17   
    pub(crate) async fn orchestrate(
   12     18   
        runtime_plugins: &::aws_smithy_runtime_api::client::runtime_plugin::RuntimePlugins,
   13     19   
        input: crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputInput,
   14     20   
    ) -> ::std::result::Result<
   15     21   
        crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputOutput,
   16     22   
        ::aws_smithy_runtime_api::client::result::SdkError<
   17     23   
            crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputError,
   18     24   
            ::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
   19     25   
        >,
   20     26   
    > {
@@ -110,116 +172,179 @@
  130    136   
                crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputError,
  131    137   
            >::new());
  132    138   
  133    139   
        ::std::borrow::Cow::Owned(rcb)
  134    140   
    }
  135    141   
}
  136    142   
  137    143   
#[derive(Debug)]
  138    144   
struct EmptyInputAndEmptyOutputResponseDeserializer;
  139    145   
impl ::aws_smithy_runtime_api::client::ser_de::DeserializeResponse for EmptyInputAndEmptyOutputResponseDeserializer {
  140         -
    fn deserialize_nonstreaming(
         146  +
    fn deserialize_nonstreaming_with_config(
  141    147   
        &self,
  142    148   
        response: &::aws_smithy_runtime_api::client::orchestrator::HttpResponse,
         149  +
        _cfg: &::aws_smithy_types::config_bag::ConfigBag,
  143    150   
    ) -> ::aws_smithy_runtime_api::client::interceptors::context::OutputOrError {
  144    151   
        let (success, status) = (response.status().is_success(), response.status().as_u16());
  145    152   
        let headers = response.headers();
  146    153   
        let body = response.body().bytes().expect("body loaded");
  147    154   
        #[allow(unused_mut)]
  148    155   
        let mut force_error = false;
  149    156   
  150    157   
        let parse_result = if !success && status != 200 || force_error {
  151    158   
            crate::protocol_serde::shape_empty_input_and_empty_output::de_empty_input_and_empty_output_http_error(status, headers, body)
  152    159   
        } else {
@@ -273,280 +333,344 @@
  293    300   
            .expect("the config must have a deserializer");
  294    301   
  295    302   
        let parsed = de.deserialize_streaming(&mut http_response);
  296    303   
        let parsed = parsed.unwrap_or_else(|| {
  297    304   
            let http_response = http_response.map(|body| {
  298    305   
                ::aws_smithy_types::body::SdkBody::from(::bytes::Bytes::copy_from_slice(&::aws_smithy_protocol_test::decode_body_data(
  299    306   
                    body.bytes().unwrap(),
  300    307   
                    ::aws_smithy_protocol_test::MediaType::from("application/xml"),
  301    308   
                )))
  302    309   
            });
  303         -
            de.deserialize_nonstreaming(&http_response)
         310  +
            // Build a config bag with the protocol for schema-based deserialization
         311  +
            #[allow(unused_mut)]
         312  +
            let mut test_cfg = ::aws_smithy_types::config_bag::ConfigBag::base();
         313  +
         314  +
            de.deserialize_nonstreaming_with_config(&http_response, &test_cfg)
  304    315   
        });
  305    316   
        let parsed = parsed
  306    317   
            .expect("should be successful response")
  307    318   
            .downcast::<crate::operation::empty_input_and_empty_output::EmptyInputAndEmptyOutputOutput>()
  308    319   
            .unwrap();
  309    320   
    }
  310    321   
}
  311    322   
  312    323   
/// Error type for the `EmptyInputAndEmptyOutputError` operation.
  313    324   
#[non_exhaustive]