<NME> service.rs
<BEF> use std::collections::BTreeMap;

use crate::botocore::{Member, Operation, ServiceDefinition, Shape, ShapeType, Value};
use crate::cargo;
use crate::config::ServiceConfig;

#[derive(Debug)]
pub struct Service<'a> {
    config: &'a crate::ServiceConfig,
    definition: ServiceDefinition,
}

impl<'b> Service<'b> {
    pub fn new(config: &'b ServiceConfig, definition: ServiceDefinition) -> Self {
        Service { config, definition }
    }

    pub fn name(&self) -> &str {
        match self.definition.metadata.service_abbreviation {
            Some(ref service_abbreviation) => service_abbreviation.as_str(),
            None => self.definition.metadata.service_full_name.as_ref(),
        }
    }

    pub fn full_name(&self) -> &str {
        &self.definition.metadata.service_full_name
    }

    pub fn service_id(&self) -> Option<&str> {
        self.definition
            .metadata
            .service_id
            .as_ref()
            .map(std::string::String::as_str)
    }

    pub fn documentation(&self) -> Option<&String> {
        self.definition.documentation.as_ref()
    }

    pub fn protocol(&self) -> &str {
        &self.definition.metadata.protocol
    }

    pub fn client_type_name(&self) -> String {
        format!("{}Client", self.service_type_name())
    }

    pub fn service_type_name(&self) -> &str {
        &self.config.base_type_name
    }

    pub fn endpoint_prefix(&self) -> &str {
        &self.definition.metadata.endpoint_prefix
    }

    pub fn api_version(&self) -> &str {
        &self.definition.metadata.api_version
    }

    pub fn target_prefix(&self) -> Option<&String> {
        self.definition.metadata.target_prefix.as_ref()
    }

    pub fn json_version(&self) -> Option<&String> {
        self.definition.metadata.json_version.as_ref()
    }

    pub fn shapes(&self) -> &BTreeMap<String, Shape> {
        &self.definition.shapes
    }

    pub fn get_shape(&self, name: &str) -> Option<&Shape> {
        self.definition.shapes.get(name)
    }

    pub fn operations(&self) -> &BTreeMap<String, Operation> {
        &self.definition.operations
    }

    pub fn shape_for_value<'a>(&'a self, value: &Value) -> Option<&'a Shape> {
        self.definition.shapes.get(&value.shape)
    }

    pub fn shape_for_member<'a>(&'a self, member: &Member) -> Option<&'a Shape> {
        self.definition.shapes.get(&member.shape)
    }

    pub fn shape_type_for_member<'a>(&'a self, member: &Member) -> Option<ShapeType> {
        self.definition
            .shapes
            .get(&member.shape)
            .map(|shape| shape.shape_type)
    }

    pub fn signing_name(&self) -> String {
        match self.definition.metadata.signing_name {
            Some(ref signing_name) => signing_name.to_string(),
            None => self.definition.metadata.endpoint_prefix.to_string(),
        }
    }

    pub fn needs_serde_json_crate(&self) -> bool {
        match self.name() {
            "AmazonApiGatewayManagementApi"
            | "Amazon CloudSearch Domain"
            | "AWS Mobile"
            | "AWS IoT Data Plane"
            | "Amazon SageMaker Runtime"
            | "SSO" => false,
            _ => true,
        }
    }

    pub fn has_event_streams(&self) -> bool {
        self.shapes().values().into_iter().any(|s| s.eventstream())
    }

    pub fn get_dependencies(&self) -> BTreeMap<String, cargo::Dependency> {
        let mut dependencies = BTreeMap::new();

        dependencies.insert(
            "async-trait".to_owned(),
            cargo::Dependency::Simple("0.1".into()),
        );
        dependencies.insert("bytes".to_owned(), cargo::Dependency::Simple("1.0".into()));
        dependencies.insert(
            "futures".to_owned(),
            cargo::Dependency::Extended {
                path: None,
                version: Some("0.3".to_owned()),
                optional: None,
                default_features: None,
                features: None,
            },
        );
        dependencies.insert(
            "rusoto_core".to_owned(),
            cargo::Dependency::Extended {
                path: Some("../../core".into()),
                version: Some(self.config.core_version.clone()),
                optional: None,
                default_features: Some(false),
                features: None,
            },
        );

        match self.protocol() {
            "json" => {
                dependencies.insert(
                    "serde".to_owned(),
                    cargo::Dependency::Extended {
                        version: Some("1.0".into()),
                        path: None,
                        optional: None,
                        default_features: None,
                        features: Some(vec!["derive".into()]),
                    },
                );
                dependencies.insert(
                    "serde_json".to_owned(),
                    cargo::Dependency::Simple("1.0".into()),
                );
            }
            "query" | "ec2" => {
                dependencies.insert(
                    "serde".to_owned(),
                    cargo::Dependency::Extended {
                        version: Some("1.0.2".into()),
                        optional: Some(true),
                        path: None,
                        default_features: None,
                        features: None,
                    },
                );
                dependencies.insert(
                    "serde_derive".to_owned(),
                    cargo::Dependency::Extended {
                        version: Some("1.0.2".into()),
                        optional: Some(true),
                        path: None,
                        default_features: None,
                        features: None,
                    },
                );
                dependencies.insert(
                    "serde_urlencoded".to_owned(),
                    cargo::Dependency::Simple("0.7".into()),
                );
                dependencies.insert("xml-rs".to_owned(), cargo::Dependency::Simple("0.8".into()));
            }
            "rest-xml" => {
                dependencies.insert(
                    "serde".to_owned(),
                    cargo::Dependency::Extended {
                        version: Some("1.0.2".into()),
                        optional: Some(true),
                        path: None,
                        default_features: None,
                        features: None,
                    },
                );
                dependencies.insert(
                    "serde_derive".to_owned(),

        dev_dependencies
    }
}
    }

    pub fn get_dev_dependencies(&self) -> BTreeMap<String, cargo::Dependency> {
        let mut dev_dependencies = BTreeMap::new();

        dev_dependencies.insert(
            "rusoto_mock".to_owned(),
            cargo::Dependency::Extended {
                path: Some("../../../mock".into()),
                version: Some(self.config.core_version.clone()),
                optional: None,
                default_features: Some(false),
                features: None,
            },
        );

        dev_dependencies.insert(
            "tokio".to_owned(),
            cargo::Dependency::Simple("1.0".to_owned()),
        );

        if let Some(ref custom_dev_dependencies) = self.config.custom_dev_dependencies {
            dev_dependencies.extend(custom_dev_dependencies.clone());
        }

        dev_dependencies
    }

    pub fn visit_shapes<F>(&self, shape_name: &str, visitor: &mut F)
    where
        F: FnMut(&str, &Shape) -> bool,
    {
        let shape = self
            .get_shape(shape_name)
            .expect("Shape missing from service definition");

        if !visitor(shape_name, shape) {
            return;
        }

        match shape.shape_type {
            ShapeType::Structure => {
                if let Some(ref members) = shape.members {
                    for member in members.values() {
                        self.visit_shapes(&member.shape, visitor);
                    }
                }
            }
            ShapeType::Map => {
                self.visit_shapes(shape.key_type(), visitor);
                self.visit_shapes(shape.value_type(), visitor);
            }
            ShapeType::List => {
                self.visit_shapes(shape.member_type(), visitor);
            }
            _ => {}
        }
    }
}

<MSG> Merge pull request #1428 from rusoto/fix/skip-type-generation-for-unused-shapes

skip type generation for unused shapes
<DFF> @@ -205,4 +205,35 @@ impl<'b> Service<'b> {
 
         dev_dependencies
     }
+
+    pub fn visit_shapes<F>(&self, shape_name: &str, visitor: &mut F)
+    where
+        F: FnMut(&str, &Shape) -> bool
+    {
+        let shape = self
+            .get_shape(shape_name)
+            .expect("Shape missing from service definition");
+
+        if !visitor(shape_name, shape) {
+            return;
+        }
+
+        match shape.shape_type {
+            ShapeType::Structure => {
+                if let Some(ref members) = shape.members {
+                    for member in members.values() {
+                        self.visit_shapes(&member.shape, visitor);
+                    }
+                }
+            }
+            ShapeType::Map => {
+                self.visit_shapes(shape.key_type(), visitor);
+                self.visit_shapes(shape.value_type(), visitor);
+            }
+            ShapeType::List => {
+                self.visit_shapes(shape.member_type(), visitor);
+            }
+            _ => {}
+        }
+    }
 }

{'commit': 'diff --git a/rusoto/services/apigatewayv2/src/generated.rs b/rusoto/services/apigatewayv2/src/generated.rs\nindex 4dc5089b6..f7545adeb 100644\n--- a/rusoto/services/apigatewayv2/src/generated.rs\n+++ b/rusoto/services/apigatewayv2/src/generated.rs\n@@ -109,26 +109,6 @@ pub struct ApiMapping {\n     pub stage: String,\n }\n \n-/// <p>Represents a collection of ApiMappings resources.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ApiMappings {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<ApiMapping>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Represents a collection of APIs.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Apis {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Api>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Represents an authorizer.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -203,47 +183,6 @@ pub struct Authorizer {\n     pub provider_arns: Option<Vec<String>>,\n }\n \n-/// <p>Represents a collection of authorizers.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Authorizers {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Authorizer>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Represents the input parameters for a CreateApi request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateApiInput {\n-    /// <p>An API key selection expression. See <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions">API Key Selection Expressions</a>.</p>\n-    pub api_key_selection_expression: Option<String>,\n-    /// <p>The description of the API.</p>\n-    pub description: Option<String>,\n-    /// <p>Avoid validating models when creating a deployment.</p>\n-    pub disable_schema_validation: Option<bool>,\n-    /// <p>The name of the API.</p>\n-    pub name: String,\n-    /// <p>The API protocol: Currently only WEBSOCKET is supported.</p>\n-    pub protocol_type: String,\n-    /// <p>The route selection expression for the API.</p>\n-    pub route_selection_expression: String,\n-    /// <p>A version identifier for the API.</p>\n-    pub version: Option<String>,\n-}\n-\n-/// <p>Represents the input parameters for a CreateApiMapping\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateApiMappingInput {\n-    /// <p>The API identifier.</p>\n-    pub api_id: String,\n-\n-    pub api_mapping_key: Option<String>,\n-    /// <p>The API stage.</p>\n-    pub stage: String,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateApiMappingRequest {\n     /// <p>The API identifier.</p>\n@@ -363,61 +302,6 @@ pub struct CreateApiResponse {\n     pub warnings: Option<Vec<String>>,\n }\n \n-/// <p>Represents the input parameters for a CreateAuthorizer\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateAuthorizerInput {\n-    /// <p>Specifies the required credentials as an IAM role for API Gateway to invoke the\n-    /// authorizer. To specify an IAM role for API Gateway to assume, use the role\'s Amazon\n-    /// Resource Name (ARN). To use resource-based permissions on the Lambda function,\n-    /// specify null.</p>\n-    pub authorizer_credentials_arn: Option<String>,\n-    /// <p>The time to live (TTL), in seconds, of cached authorizer results. If it equals 0,\n-    /// authorization caching is disabled. If it is greater than 0, API Gateway will cache\n-    /// authorizer responses. If this field is not set, the default value is 300. The maximum\n-    /// value is 3600, or 1 hour.</p>\n-    pub authorizer_result_ttl_in_seconds: Option<i64>,\n-    /// <p>The authorizer type. Currently the only valid value is REQUEST, for a\n-    /// Lambda function using incoming request parameters.</p>\n-    pub authorizer_type: String,\n-    /// <p>The authorizer\'s Uniform Resource Identifier (URI). For\n-    /// REQUEST authorizers, this must be a\n-    /// well-formed Lambda function URI, for example,\n-    /// arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations.\n-    /// In general, the URI has this form:\n-    /// arn:aws:apigateway:{region}:lambda:path/{service_api}\n-    /// , where {region} is the same as the region hosting the Lambda\n-    /// function, path indicates that the remaining substring in the URI should be treated as\n-    /// the path to the resource, including the initial /. For Lambda functions,\n-    /// this is usually of the form\n-    /// /2015-03-31/functions/[FunctionARN]/invocations.</p>\n-    pub authorizer_uri: String,\n-    /// <p>The identity source for which authorization is requested.</p><p>For the REQUEST authorizer, this is required when authorization\n-    /// caching is enabled. The value is a comma-separated string of one or more mapping\n-    /// expressions of the specified request parameters. For example, if an Auth\n-    /// header and a Name query string parameters are defined as identity\n-    /// sources, this value is method.request.header.Auth,\n-    /// method.request.querystring.Name. These parameters will be used to\n-    /// derive the authorization caching key and to perform runtime validation of the\n-    /// REQUEST authorizer by verifying all of the identity-related request\n-    /// parameters are present, not null, and non-empty. Only when this is true does the\n-    /// authorizer invoke the authorizer Lambda function, otherwise, it returns a 401\n-    /// Unauthorized response without calling the Lambda function. The valid value\n-    /// is a string of comma-separated mapping expressions of the specified request\n-    /// parameters. When the authorization caching is not enabled, this property is\n-    /// optional.</p>\n-    pub identity_source: Vec<String>,\n-    /// <p>The\n-    /// validation expression does not apply to the REQUEST authorizer.</p>\n-    pub identity_validation_expression: Option<String>,\n-    /// <p>The name of the authorizer.</p>\n-    pub name: String,\n-    /// <p>For\n-    /// REQUEST authorizer, this is not\n-    /// defined.</p>\n-    pub provider_arns: Option<Vec<String>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateAuthorizerRequest {\n     /// <p>The API identifier.</p>\n@@ -560,17 +444,6 @@ pub struct CreateAuthorizerResponse {\n     pub provider_arns: Option<Vec<String>>,\n }\n \n-/// <p>Represents the input parameters for a CreateDeployment\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateDeploymentInput {\n-    /// <p>The description for the deployment resource.</p>\n-    pub description: Option<String>,\n-    /// <p>The name of the Stage resource for the Deployment\n-    /// resource to create.</p>\n-    pub stage_name: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateDeploymentRequest {\n     /// <p>The API identifier.</p>\n@@ -613,16 +486,6 @@ pub struct CreateDeploymentResponse {\n     pub description: Option<String>,\n }\n \n-/// <p>Represents the input parameters for a CreateDomainName\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateDomainNameInput {\n-    /// <p>The domain name.</p>\n-    pub domain_name: String,\n-    /// <p>The domain name configurations.</p>\n-    pub domain_name_configurations: Option<Vec<DomainNameConfiguration>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateDomainNameRequest {\n     /// <p>The domain name.</p>\n@@ -651,95 +514,6 @@ pub struct CreateDomainNameResponse {\n     pub domain_name_configurations: Option<Vec<DomainNameConfiguration>>,\n }\n \n-/// <p>Represents the input parameters for a CreateIntegration\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateIntegrationInput {\n-    /// <p>The connection ID.</p>\n-    pub connection_id: Option<String>,\n-    /// <p>The type of the network connection to the integration endpoint. Currently the only\n-    /// valid value is INTERNET, for connections through the public routable\n-    /// internet.</p>\n-    pub connection_type: Option<String>,\n-    /// <p>Specifies how to handle response payload content type conversions. Supported\n-    /// values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the\n-    /// following behaviors:</p><p>\n-    /// CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded\n-    /// string to the corresponding binary blob.</p><p>\n-    /// CONVERT_TO_TEXT: Converts a response payload from a binary blob to a\n-    /// Base64-encoded string.</p><p>If this property is not defined, the response payload will be passed through from\n-    /// the integration response to the route response or method response without\n-    /// modification.</p>\n-    pub content_handling_strategy: Option<String>,\n-    /// <p>Specifies the credentials required for the integration, if any. For AWS\n-    /// integrations, three options are available. To specify an IAM Role for API Gateway to\n-    /// assume, use the role\'s Amazon Resource Name (ARN). To require that the caller\'s\n-    /// identity be passed through from the request, specify the string\n-    /// arn:aws:iam::*:user/*. To use resource-based permissions on supported\n-    /// AWS services, specify null.</p>\n-    pub credentials_arn: Option<String>,\n-    /// <p>The description of the integration.</p>\n-    pub description: Option<String>,\n-    /// <p>Specifies the integration\'s HTTP method type.</p>\n-    pub integration_method: Option<String>,\n-    /// <p>The integration type of an integration. One of the following:</p><p>\n-    /// AWS: for integrating the route or method request with an AWS service\n-    /// action, including the Lambda function-invoking action. With the Lambda\n-    /// function-invoking action, this is referred to as the Lambda custom integration. With\n-    /// any other AWS service action, this is known as AWS integration.</p><p>\n-    /// AWS_PROXY: for integrating the route or method request with the Lambda\n-    /// function-invoking action with the client request passed through as-is. This\n-    /// integration is also referred to as Lambda proxy integration.</p><p>\n-    /// HTTP: for integrating the route or method request with an HTTP\n-    /// endpoint. This\n-    /// integration is also referred to as HTTP custom integration.</p><p>\n-    /// HTTP_PROXY: for integrating route or method request with an HTTP\n-    /// endpoint, with the client\n-    /// request passed through as-is. This is also referred to as HTTP proxy\n-    /// integration.</p><p>\n-    /// MOCK: for integrating the route or method request with API Gateway as a\n-    /// "loopback" endpoint without invoking any backend.</p>\n-    pub integration_type: String,\n-    /// <p>For a Lambda proxy integration, this is the URI of the Lambda function.</p>\n-    pub integration_uri: Option<String>,\n-    /// <p>Specifies the pass-through behavior for incoming requests based on the\n-    /// Content-Type header in the request, and the available mapping\n-    /// templates specified as the requestTemplates property on the\n-    /// Integration resource. There are three valid values:\n-    /// WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and\n-    /// NEVER.</p><p>\n-    /// WHEN_NO_MATCH passes the request body for unmapped content types through\n-    /// to the integration backend without transformation.</p><p>\n-    /// NEVER rejects unmapped content types with an HTTP 415 Unsupported\n-    /// Media Type response.</p><p>\n-    /// WHEN_NO_TEMPLATES allows pass-through when the integration has no\n-    /// content types mapped to templates. However, if there is at least one content type\n-    /// defined, unmapped content types will be rejected with the same HTTP 415\n-    /// Unsupported Media Type response.</p>\n-    pub passthrough_behavior: Option<String>,\n-    /// <p>A key-value map specifying request parameters that are passed from the method\n-    /// request to the backend. The key is an integration request parameter name and the\n-    /// associated value is a method request parameter value or static value that must be\n-    /// enclosed within single quotes and pre-encoded as required by the backend. The method\n-    /// request parameter value must match the pattern of\n-    /// method.request.{location}.{name}\n-    /// , where\n-    /// {location}\n-    /// is querystring, path, or header; and\n-    /// {name}\n-    /// must be a valid and unique method request parameter name.</p>\n-    pub request_parameters: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>Represents a map of Velocity templates that are applied on the request payload\n-    /// based on the value of the Content-Type header sent by the client. The content type\n-    /// value is the key in this map, and the template (as a String) is the value.</p>\n-    pub request_templates: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The template selection expression for the integration.</p>\n-    pub template_selection_expression: Option<String>,\n-    /// <p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000\n-    /// milliseconds or 29 seconds.</p>\n-    pub timeout_in_millis: Option<i64>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateIntegrationRequest {\n     /// <p>The API identifier.</p>\n@@ -977,42 +751,6 @@ pub struct CreateIntegrationResponse {\n     pub timeout_in_millis: Option<i64>,\n }\n \n-/// <p>Represents the input parameters for a CreateIntegrationResponse\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateIntegrationResponseInput {\n-    /// <p>Specifies how to handle response payload content type conversions. Supported\n-    /// values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the\n-    /// following behaviors:</p><p>\n-    /// CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded\n-    /// string to the corresponding binary blob.</p><p>\n-    /// CONVERT_TO_TEXT: Converts a response payload from a binary blob to a\n-    /// Base64-encoded string.</p><p>If this property is not defined, the response payload will be passed through from\n-    /// the integration response to the route response or method response without\n-    /// modification.</p>\n-    pub content_handling_strategy: Option<String>,\n-    /// <p>The integration response key.</p>\n-    pub integration_response_key: String,\n-    /// <p>A key-value map specifying response parameters that are passed to the method\n-    /// response from the backend. The key is a method response header parameter name and the\n-    /// mapped value is an integration response header value, a static value enclosed within\n-    /// a pair of single quotes, or a JSON expression from the integration response body. The\n-    /// mapping key must match the pattern of method.response.header.{name},\n-    /// where {name} is a valid and unique header name. The mapped non-static\n-    /// value must match the pattern of integration.response.header.{name} or\n-    /// integration.response.body.{JSON-expression}, where\n-    /// {name} is a valid and unique response header name and\n-    /// {JSON-expression} is a valid JSON expression without the $\n-    /// prefix.</p>\n-    pub response_parameters: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The collection of response templates for the integration response as a\n-    /// string-to-string map of key-value pairs. Response templates are represented as a\n-    /// key/value map, with a content-type as the key and a template as the value.</p>\n-    pub response_templates: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The template selection expression for the integration response.</p>\n-    pub template_selection_expression: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateIntegrationResponseRequest {\n     /// <p>The API identifier.</p>\n@@ -1109,20 +847,6 @@ pub struct CreateIntegrationResponseResponse {\n     pub template_selection_expression: Option<String>,\n }\n \n-/// <p>Represents the input parameters for a CreateModel request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateModelInput {\n-    /// <p>The content-type for the model, for example, "application/json".</p>\n-    pub content_type: Option<String>,\n-    /// <p>The description of the model.</p>\n-    pub description: Option<String>,\n-    /// <p>The name of the model. Must be alphanumeric.</p>\n-    pub name: String,\n-    /// <p>The schema for the model. For application/json models, this should be JSON schema\n-    /// draft 4 model.</p>\n-    pub schema: String,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateModelRequest {\n     /// <p>The API identifier.</p>\n@@ -1171,40 +895,6 @@ pub struct CreateModelResponse {\n     pub schema: Option<String>,\n }\n \n-/// <p>Represents the input parameters for a CreateRoute request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateRouteInput {\n-    /// <p>Specifies whether an API key is required for the route.</p>\n-    pub api_key_required: Option<bool>,\n-    /// <p>The authorization scopes supported by this\n-    /// route.</p>\n-    pub authorization_scopes: Option<Vec<String>>,\n-    /// <p>The authorization type for the route. Valid values are NONE for open\n-    /// access, AWS_IAM for using AWS IAM permissions, and CUSTOM\n-    /// for using a Lambda\n-    /// authorizer.</p>\n-    pub authorization_type: Option<String>,\n-    /// <p>The identifier of the Authorizer resource to be associated with this\n-    /// route, if the authorizationType is CUSTOM\n-    /// . The authorizer identifier is generated by API Gateway\n-    /// when you created the authorizer.</p>\n-    pub authorizer_id: Option<String>,\n-    /// <p>The model selection expression for the route.</p>\n-    pub model_selection_expression: Option<String>,\n-    /// <p>The operation name for the route.</p>\n-    pub operation_name: Option<String>,\n-    /// <p>The request models for the route.</p>\n-    pub request_models: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The request parameters for the route.</p>\n-    pub request_parameters: Option<::std::collections::HashMap<String, ParameterConstraints>>,\n-    /// <p>The route key for the route.</p>\n-    pub route_key: String,\n-    /// <p>The route response selection expression for the route.</p>\n-    pub route_response_selection_expression: Option<String>,\n-    /// <p>The target for the route.</p>\n-    pub target: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateRouteRequest {\n     /// <p>The API identifier.</p>\n@@ -1327,20 +1017,6 @@ pub struct CreateRouteResponse {\n     pub target: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an CreateRouteResponse\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateRouteResponseInput {\n-    /// <p>The model selection expression for the route response.</p>\n-    pub model_selection_expression: Option<String>,\n-    /// <p>The response models for the route response.</p>\n-    pub response_models: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The route response parameters.</p>\n-    pub response_parameters: Option<::std::collections::HashMap<String, ParameterConstraints>>,\n-    /// <p>The route response key.</p>\n-    pub route_response_key: String,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateRouteResponseRequest {\n     /// <p>The API identifier.</p>\n@@ -1391,29 +1067,6 @@ pub struct CreateRouteResponseResponse {\n     pub route_response_key: Option<String>,\n }\n \n-/// <p>Represents the input parameters for a CreateStage request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateStageInput {\n-    /// <p>Settings for logging access in this stage.</p>\n-    pub access_log_settings: Option<AccessLogSettings>,\n-    /// <p>The identifier of a client certificate for a Stage.</p>\n-    pub client_certificate_id: Option<String>,\n-    /// <p>The default route settings for the stage.</p>\n-    pub default_route_settings: Option<RouteSettings>,\n-    /// <p>The deployment identifier of the API stage.</p>\n-    pub deployment_id: Option<String>,\n-    /// <p>The description for the API stage.</p>\n-    pub description: Option<String>,\n-    /// <p>Route settings for the stage.</p>\n-    pub route_settings: Option<::std::collections::HashMap<String, RouteSettings>>,\n-    /// <p>The name of the stage.</p>\n-    pub stage_name: String,\n-    /// <p>A map that defines the stage variables for a Stage. Variable names\n-    /// can have alphanumeric and underscore characters, and the values must match\n-    /// [A-Za-z0-9-._~:/?#&=,]+.</p>\n-    pub stage_variables: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateStageRequest {\n     /// <p>Settings for logging access in this stage.</p>\n@@ -1641,18 +1294,6 @@ pub struct Deployment {\n     pub description: Option<String>,\n }\n \n-/// <p>A collection resource that contains zero or more references to your existing\n-/// deployments, and links that guide you on how to interact with your collection. The\n-/// collection offers a paginated view of the contained deployments.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Deployments {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Deployment>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Represents a domain name.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -1702,16 +1343,6 @@ pub struct DomainNameConfiguration {\n     pub hosted_zone_id: Option<String>,\n }\n \n-/// <p>Represents a collection of domain names.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DomainNames {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<DomainName>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct GetApiMappingRequest {\n     /// <p>The API mapping identifier.</p>\n@@ -2864,35 +2495,6 @@ pub struct IntegrationResponse {\n     pub template_selection_expression: Option<String>,\n }\n \n-/// <p>Represents a collection of integration responses.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct IntegrationResponses {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<IntegrationResponse>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Represents a collection of integrations.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Integrations {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Integration>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>A limit has been exceeded. See the accompanying error message for details.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct LimitExceededException {\n-    /// <p>The limit type.</p>\n-    pub limit_type: Option<String>,\n-    /// <p>Describes the error encountered.</p>\n-    pub message: Option<String>,\n-}\n-\n /// <p>Represents a data model for an API. See <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html">Create Models and Mapping Templates for Request and Response\n /// Mappings</a>.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n@@ -2920,17 +2522,6 @@ pub struct Model {\n     pub schema: Option<String>,\n }\n \n-/// <p>Represents a collection of data models. See <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings.html">Create Models and Mapping Templates for Request and Response\n-/// Mappings</a>.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Models {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Model>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Validation constraints imposed on parameters of a request (path, query string,\n /// headers).</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n@@ -3031,16 +2622,6 @@ pub struct RouteResponse {\n     pub route_response_key: String,\n }\n \n-/// <p>Represents a collection of route responses.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct RouteResponses {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<RouteResponse>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Represents a collection of route settings.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct RouteSettings {\n@@ -3070,16 +2651,6 @@ pub struct RouteSettings {\n     pub throttling_rate_limit: Option<f64>,\n }\n \n-/// <p>Represents a collection of routes.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Routes {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Route>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Represents an API stage.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -3120,59 +2691,12 @@ pub struct Stage {\n     /// <p>The name of the stage.</p>\n     #[serde(rename = "StageName")]\n     pub stage_name: String,\n-    /// <p>A map that defines the stage variables for a stage resource. Variable names can\n-    /// have alphanumeric and underscore characters, and the values must match\n-    /// [A-Za-z0-9-._~:/?#&=,]+.</p>\n-    #[serde(rename = "StageVariables")]\n-    #[serde(skip_serializing_if = "Option::is_none")]\n-    pub stage_variables: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n-/// <p>A collection of Stage resources that are associated with the ApiKey\n-/// resource.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Stages {\n-    /// <p>The elements from this collection.</p>\n-    pub items: Option<Vec<Stage>>,\n-    /// <p>The next page of elements from this collection. Not valid for the last element of\n-    /// the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Represents a template.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Template {\n-    /// <p>The template value.</p>\n-    pub value: Option<String>,\n-}\n-\n-/// <p>Represents the input parameters for an UpdateApi request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateApiInput {\n-    /// <p>An API key selection expression. See <a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-websocket-api-selection-expressions.html#apigateway-websocket-api-apikey-selection-expressions">API Key Selection Expressions</a>.</p>\n-    pub api_key_selection_expression: Option<String>,\n-    /// <p>The description of the API.</p>\n-    pub description: Option<String>,\n-    /// <p>Avoid validating models when creating a deployment.</p>\n-    pub disable_schema_validation: Option<bool>,\n-    /// <p>The name of the API.</p>\n-    pub name: Option<String>,\n-    /// <p>The route selection expression for the API.</p>\n-    pub route_selection_expression: Option<String>,\n-    /// <p>A version identifier for the API.</p>\n-    pub version: Option<String>,\n-}\n-\n-/// <p>Represents the input parameters for an UpdateApiMapping\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateApiMappingInput {\n-    /// <p>The API identifier.</p>\n-    pub api_id: Option<String>,\n-    /// <p>The API mapping key.</p>\n-    pub api_mapping_key: Option<String>,\n-    /// <p>The API stage.</p>\n-    pub stage: Option<String>,\n+    /// <p>A map that defines the stage variables for a stage resource. Variable names can\n+    /// have alphanumeric and underscore characters, and the values must match\n+    /// [A-Za-z0-9-._~:/?#&=,]+.</p>\n+    #[serde(rename = "StageVariables")]\n+    #[serde(skip_serializing_if = "Option::is_none")]\n+    pub stage_variables: Option<::std::collections::HashMap<String, String>>,\n }\n \n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n@@ -3300,59 +2824,6 @@ pub struct UpdateApiResponse {\n     pub warnings: Option<Vec<String>>,\n }\n \n-/// <p>The input parameters for an UpdateAuthorizer request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateAuthorizerInput {\n-    /// <p>Specifies the required credentials as an IAM role for API Gateway to invoke the\n-    /// authorizer. To specify an IAM role for API Gateway to assume, use the role\'s Amazon\n-    /// Resource Name (ARN). To use resource-based permissions on the Lambda function,\n-    /// specify null.</p>\n-    pub authorizer_credentials_arn: Option<String>,\n-    /// <p>The time to live (TTL), in seconds, of cached authorizer results. If it is zero,\n-    /// authorization caching is disabled. If it is greater than zero, API Gateway will cache\n-    /// authorizer responses. If this field is not set, the default value is 300. The maximum\n-    /// value is 3600, or 1 hour.</p>\n-    pub authorizer_result_ttl_in_seconds: Option<i64>,\n-    /// <p>The authorizer type. Currently the only valid value is REQUEST, for a\n-    /// Lambda function using incoming request parameters.</p>\n-    pub authorizer_type: Option<String>,\n-    /// <p>The authorizer\'s Uniform Resource Identifier (URI). For\n-    /// REQUEST authorizers, this must be a\n-    /// well-formed Lambda function URI, for example,\n-    /// arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations.\n-    /// In general, the URI has this form:\n-    /// arn:aws:apigateway:{region}:lambda:path/{service_api}\n-    /// , where {region} is the same as the region hosting the Lambda\n-    /// function, path indicates that the remaining substring in the URI should be treated as\n-    /// the path to the resource, including the initial /. For Lambda functions,\n-    /// this is usually of the form\n-    /// /2015-03-31/functions/[FunctionARN]/invocations.</p>\n-    pub authorizer_uri: Option<String>,\n-    /// <p>The identity source for which authorization is requested.</p><p>For the REQUEST authorizer, this is required when authorization\n-    /// caching is enabled. The value is a comma-separated string of one or more mapping\n-    /// expressions of the specified request parameters. For example, if an Auth header, a\n-    /// Name query string parameter are defined as identity sources, this value is\n-    /// $method.request.header.Auth, $method.request.querystring.Name. These\n-    /// parameters will be used to derive the authorization caching key and to perform\n-    /// runtime validation of the REQUEST authorizer by verifying all of the\n-    /// identity-related request parameters are present, not null and non-empty. Only when\n-    /// this is true does the authorizer invoke the authorizer Lambda function, otherwise, it\n-    /// returns a 401 Unauthorized response without calling the Lambda function.\n-    /// The valid value is a string of comma-separated mapping expressions of the specified\n-    /// request parameters. When the authorization caching is not enabled, this property is\n-    /// optional.</p>\n-    pub identity_source: Option<Vec<String>>,\n-    /// <p>The\n-    /// validation expression does not apply to the REQUEST authorizer.</p>\n-    pub identity_validation_expression: Option<String>,\n-    /// <p>The name of the authorizer.</p>\n-    pub name: Option<String>,\n-    /// <p>For\n-    /// REQUEST authorizer, this is not\n-    /// defined.</p>\n-    pub provider_arns: Option<Vec<String>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateAuthorizerRequest {\n     /// <p>The API identifier.</p>\n@@ -3501,14 +2972,6 @@ pub struct UpdateAuthorizerResponse {\n     pub provider_arns: Option<Vec<String>>,\n }\n \n-/// <p>Represents the input parameters for an UpdateDeployment\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateDeploymentInput {\n-    /// <p>The description for the deployment resource.</p>\n-    pub description: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateDeploymentRequest {\n     /// <p>The API identifier.</p>\n@@ -3549,14 +3012,6 @@ pub struct UpdateDeploymentResponse {\n     pub description: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an UpdateDomainName\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateDomainNameInput {\n-    /// <p>The domain name configurations.</p>\n-    pub domain_name_configurations: Option<Vec<DomainNameConfiguration>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateDomainNameRequest {\n     /// <p>The domain name.</p>\n@@ -3585,95 +3040,6 @@ pub struct UpdateDomainNameResponse {\n     pub domain_name_configurations: Option<Vec<DomainNameConfiguration>>,\n }\n \n-/// <p>Represents the input parameters for an UpdateIntegration\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateIntegrationInput {\n-    /// <p>The connection ID.</p>\n-    pub connection_id: Option<String>,\n-    /// <p>The type of the network connection to the integration endpoint. Currently the only\n-    /// valid value is INTERNET, for connections through the public routable\n-    /// internet.</p>\n-    pub connection_type: Option<String>,\n-    /// <p>Specifies how to handle response payload content type conversions. Supported\n-    /// values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the\n-    /// following behaviors:</p><p>\n-    /// CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded\n-    /// string to the corresponding binary blob.</p><p>\n-    /// CONVERT_TO_TEXT: Converts a response payload from a binary blob to a\n-    /// Base64-encoded string.</p><p>If this property is not defined, the response payload will be passed through from\n-    /// the integration response to the route response or method response without\n-    /// modification.</p>\n-    pub content_handling_strategy: Option<String>,\n-    /// <p>Specifies the credentials required for the integration, if any. For AWS\n-    /// integrations, three options are available. To specify an IAM Role for API Gateway to\n-    /// assume, use the role\'s Amazon Resource Name (ARN). To require that the caller\'s\n-    /// identity be passed through from the request, specify the string\n-    /// arn:aws:iam::*:user/*. To use resource-based permissions on supported\n-    /// AWS services, specify null.</p>\n-    pub credentials_arn: Option<String>,\n-    /// <p>The description of the integration</p>\n-    pub description: Option<String>,\n-    /// <p>Specifies the integration\'s HTTP method type.</p>\n-    pub integration_method: Option<String>,\n-    /// <p>The integration type of an integration. One of the following:</p><p>\n-    /// AWS: for integrating the route or method request with an AWS service\n-    /// action, including the Lambda function-invoking action. With the Lambda\n-    /// function-invoking action, this is referred to as the Lambda custom integration. With\n-    /// any other AWS service action, this is known as AWS integration.</p><p>\n-    /// AWS_PROXY: for integrating the route or method request with the Lambda\n-    /// function-invoking action with the client request passed through as-is. This\n-    /// integration is also referred to as Lambda proxy integration.</p><p>\n-    /// HTTP: for integrating the route or method request with an HTTP\n-    /// endpoint. This\n-    /// integration is also referred to as the HTTP custom integration.</p><p>\n-    /// HTTP_PROXY: for integrating route or method request with an HTTP\n-    /// endpoint, with the client\n-    /// request passed through as-is. This is also referred to as HTTP proxy\n-    /// integration.</p><p>\n-    /// MOCK: for integrating the route or method request with API Gateway as a\n-    /// "loopback" endpoint without invoking any backend.</p>\n-    pub integration_type: Option<String>,\n-    /// <p>For a Lambda proxy integration, this is the URI of the Lambda function.</p>\n-    pub integration_uri: Option<String>,\n-    /// <p>Specifies the pass-through behavior for incoming requests based on the\n-    /// Content-Type header in the request, and the available mapping\n-    /// templates specified as the requestTemplates property on the\n-    /// Integration resource. There are three valid values:\n-    /// WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and\n-    /// NEVER.</p><p>\n-    /// WHEN_NO_MATCH passes the request body for unmapped content types through\n-    /// to the integration backend without transformation.</p><p>\n-    /// NEVER rejects unmapped content types with an HTTP 415 Unsupported\n-    /// Media Type response.</p><p>\n-    /// WHEN_NO_TEMPLATES allows pass-through when the integration has no\n-    /// content types mapped to templates. However, if there is at least one content type\n-    /// defined, unmapped content types will be rejected with the same HTTP 415\n-    /// Unsupported Media Type response.</p>\n-    pub passthrough_behavior: Option<String>,\n-    /// <p>A key-value map specifying request parameters that are passed from the method\n-    /// request to the backend. The key is an integration request parameter name and the\n-    /// associated value is a method request parameter value or static value that must be\n-    /// enclosed within single quotes and pre-encoded as required by the backend. The method\n-    /// request parameter value must match the pattern of\n-    /// method.request.{location}.{name}\n-    /// , where\n-    /// {location}\n-    /// is querystring, path, or header; and\n-    /// {name}\n-    /// must be a valid and unique method request parameter name.</p>\n-    pub request_parameters: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>Represents a map of Velocity templates that are applied on the request payload\n-    /// based on the value of the Content-Type header sent by the client. The content type\n-    /// value is the key in this map, and the template (as a String) is the value.</p>\n-    pub request_templates: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The template selection expression for the integration.</p>\n-    pub template_selection_expression: Option<String>,\n-    /// <p>Custom timeout between 50 and 29,000 milliseconds. The default value is 29,000\n-    /// milliseconds or 29 seconds.</p>\n-    pub timeout_in_millis: Option<i64>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateIntegrationRequest {\n     /// <p>The API identifier.</p>\n@@ -3915,47 +3281,6 @@ pub struct UpdateIntegrationResponse {\n     pub timeout_in_millis: Option<i64>,\n }\n \n-/// <p>Represents the input parameters for an UpdateIntegrationResponse\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateIntegrationResponseInput {\n-    /// <p>Specifies how to handle response payload content type conversions. Supported\n-    /// values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the\n-    /// following behaviors:</p><p>\n-    /// CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded\n-    /// string to the corresponding binary blob.</p><p>\n-    /// CONVERT_TO_TEXT: Converts a response payload from a binary blob to a\n-    /// Base64-encoded string.</p><p>If this property is not defined, the response payload will be passed through from\n-    /// the integration response to the route response or method response without\n-    /// modification.</p>\n-    pub content_handling_strategy: Option<String>,\n-    /// <p>The integration response key.</p>\n-    pub integration_response_key: Option<String>,\n-    /// <p>A key-value map specifying response parameters that are passed to the method\n-    /// response from the backend. The key is a method response header parameter name and the\n-    /// mapped value is an integration response header value, a static value enclosed within\n-    /// a pair of single quotes, or a JSON expression from the integration response body. The\n-    /// mapping key must match the pattern of\n-    /// method.response.header.{name}\n-    /// , where name is a valid and unique header name. The mapped non-static value\n-    /// must match the pattern of\n-    /// integration.response.header.{name}\n-    /// or\n-    /// integration.response.body.{JSON-expression}\n-    /// , where\n-    /// {name}\n-    /// is a valid and unique response header name and\n-    /// {JSON-expression}\n-    /// is a valid JSON expression without the $ prefix.</p>\n-    pub response_parameters: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The collection of response templates for the integration response as a\n-    /// string-to-string map of key-value pairs. Response templates are represented as a\n-    /// key/value map, with a content-type as the key and a template as the value.</p>\n-    pub response_templates: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The template selection expression for the integration response.</p>\n-    pub template_selection_expression: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateIntegrationResponseRequest {\n     /// <p>The API identifier.</p>\n@@ -4061,20 +3386,6 @@ pub struct UpdateIntegrationResponseResponse {\n     pub template_selection_expression: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an UpdateModel request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateModelInput {\n-    /// <p>The content-type for the model, for example, "application/json".</p>\n-    pub content_type: Option<String>,\n-    /// <p>The description of the model.</p>\n-    pub description: Option<String>,\n-    /// <p>The name of the model.</p>\n-    pub name: Option<String>,\n-    /// <p>The schema for the model. For application/json models, this should be JSON schema\n-    /// draft 4 model.</p>\n-    pub schema: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateModelRequest {\n     /// <p>The API identifier.</p>\n@@ -4128,40 +3439,6 @@ pub struct UpdateModelResponse {\n     pub schema: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an UpdateRoute request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateRouteInput {\n-    /// <p>Specifies whether an API key is required for the route.</p>\n-    pub api_key_required: Option<bool>,\n-    /// <p>The authorization scopes supported by this\n-    /// route.</p>\n-    pub authorization_scopes: Option<Vec<String>>,\n-    /// <p>The authorization type for the route. Valid values are NONE for open\n-    /// access, AWS_IAM for using AWS IAM permissions, and CUSTOM\n-    /// for using a Lambda\n-    /// authorizer.</p>\n-    pub authorization_type: Option<String>,\n-    /// <p>The identifier of the Authorizer resource to be associated with this\n-    /// route, if the authorizationType is CUSTOM\n-    /// . The authorizer identifier is generated by API Gateway\n-    /// when you created the authorizer.</p>\n-    pub authorizer_id: Option<String>,\n-    /// <p>The model selection expression for the route.</p>\n-    pub model_selection_expression: Option<String>,\n-    /// <p>The operation name for the route.</p>\n-    pub operation_name: Option<String>,\n-    /// <p>The request models for the route.</p>\n-    pub request_models: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The request parameters for the route.</p>\n-    pub request_parameters: Option<::std::collections::HashMap<String, ParameterConstraints>>,\n-    /// <p>The route key for the route.</p>\n-    pub route_key: Option<String>,\n-    /// <p>The route response selection expression for the route.</p>\n-    pub route_response_selection_expression: Option<String>,\n-    /// <p>The target for the route.</p>\n-    pub target: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateRouteRequest {\n     /// <p>The API identifier.</p>\n@@ -4288,20 +3565,6 @@ pub struct UpdateRouteResponse {\n     pub target: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an UpdateRouteResponse\n-/// request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateRouteResponseInput {\n-    /// <p>The model selection expression for the route response.</p>\n-    pub model_selection_expression: Option<String>,\n-    /// <p>The response models for the route response.</p>\n-    pub response_models: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The route response parameters.</p>\n-    pub response_parameters: Option<::std::collections::HashMap<String, ParameterConstraints>>,\n-    /// <p>The route response key.</p>\n-    pub route_response_key: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateRouteResponseRequest {\n     /// <p>The API identifier.</p>\n@@ -4356,27 +3619,6 @@ pub struct UpdateRouteResponseResponse {\n     pub route_response_key: Option<String>,\n }\n \n-/// <p>Represents the input parameters for an UpdateStage request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateStageInput {\n-    /// <p>Settings for logging access in this stage.</p>\n-    pub access_log_settings: Option<AccessLogSettings>,\n-    /// <p>The identifier of a client certificate for a Stage.</p>\n-    pub client_certificate_id: Option<String>,\n-    /// <p>The default route settings for the stage.</p>\n-    pub default_route_settings: Option<RouteSettings>,\n-    /// <p>The deployment identifier for the API stage.</p>\n-    pub deployment_id: Option<String>,\n-    /// <p>The description for the API stage.</p>\n-    pub description: Option<String>,\n-    /// <p>Route settings for the stage.</p>\n-    pub route_settings: Option<::std::collections::HashMap<String, RouteSettings>>,\n-    /// <p>A map that defines the stage variables for a Stage. Variable names\n-    /// can have alphanumeric and underscore characters, and the values must match\n-    /// [A-Za-z0-9-._~:/?#&=,]+.</p>\n-    pub stage_variables: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateStageRequest {\n     /// <p>Settings for logging access in this stage.</p>\ndiff --git a/rusoto/services/greengrass/src/generated.rs b/rusoto/services/greengrass/src/generated.rs\nindex 1f8dcb4c1..461ac9321 100644\n--- a/rusoto/services/greengrass/src/generated.rs\n+++ b/rusoto/services/greengrass/src/generated.rs\n@@ -1260,10 +1260,6 @@ pub struct DisassociateServiceRoleFromAccountResponse {\n     pub disassociated_at: Option<String>,\n }\n \n-/// <p>Empty</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Empty {}\n-\n /// <p>Details about the error.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -1405,15 +1401,6 @@ pub struct FunctionRunAsConfig {\n     pub uid: Option<i64>,\n }\n \n-/// <p>General error information.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct GeneralError {\n-    /// <p>Details about the error.</p>\n-    pub error_details: Option<Vec<ErrorDetail>>,\n-    /// <p>A message containing information about the error.</p>\n-    pub message: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct GetAssociatedRoleRequest {\n     /// <p>The ID of the Greengrass group.</p>\n@@ -2278,17 +2265,6 @@ pub struct GroupCertificateAuthorityProperties {\n     pub group_certificate_authority_id: Option<String>,\n }\n \n-/// <p>Information about a group certificate configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct GroupCertificateConfiguration {\n-    /// <p>The amount of time remaining before the certificate authority expires, in milliseconds.</p>\n-    pub certificate_authority_expiry_in_milliseconds: Option<String>,\n-    /// <p>The amount of time remaining before the certificate expires, in milliseconds.</p>\n-    pub certificate_expiry_in_milliseconds: Option<String>,\n-    /// <p>The ID of the group certificate configuration.</p>\n-    pub group_id: Option<String>,\n-}\n-\n /// <p>Information about a group.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -2528,15 +2504,6 @@ pub struct ListCoreDefinitionsResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>A list of definitions.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListDefinitionsResponse {\n-    /// <p>Information about a definition.</p>\n-    pub definitions: Option<Vec<DefinitionInformation>>,\n-    /// <p>The token for the next set of results, or &#39;&#39;null&#39;&#39; if there are no additional results.</p>\n-    pub next_token: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListDeploymentsRequest {\n     /// <p>The ID of the Greengrass group.</p>\n@@ -2915,15 +2882,6 @@ pub struct ListTagsForResourceResponse {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>A list of versions.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListVersionsResponse {\n-    /// <p>The token for the next set of results, or &#39;&#39;null&#39;&#39; if there are no additional results.</p>\n-    pub next_token: Option<String>,\n-    /// <p>Information about a version.</p>\n-    pub versions: Option<Vec<VersionInformation>>,\n-}\n-\n /// <p>Attributes that define a local device resource.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct LocalDeviceResourceData {\ndiff --git a/rusoto/services/guardduty/src/generated.rs b/rusoto/services/guardduty/src/generated.rs\nindex b8e93c59b..9916caba4 100644\n--- a/rusoto/services/guardduty/src/generated.rs\n+++ b/rusoto/services/guardduty/src/generated.rs\n@@ -513,15 +513,6 @@ pub struct DnsRequestAction {\n #[cfg_attr(test, derive(Serialize))]\n pub struct DomainDetails {}\n \n-/// <p>Error response object.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ErrorResponse {\n-    /// <p>The error message.</p>\n-    pub message: Option<String>,\n-    /// <p>The error type.</p>\n-    pub type_: Option<String>,\n-}\n-\n /// <p>Representation of a abnormal or suspicious activity.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\ndiff --git a/rusoto/services/iot1click-devices/src/generated.rs b/rusoto/services/iot1click-devices/src/generated.rs\nindex de1bf7443..689e56101 100644\n--- a/rusoto/services/iot1click-devices/src/generated.rs\n+++ b/rusoto/services/iot1click-devices/src/generated.rs\n@@ -83,12 +83,6 @@ pub struct Device {\n     pub type_: Option<String>,\n }\n \n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DeviceClaimResponse {\n-    /// <p>The device\'s final claim state.</p>\n-    pub state: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n pub struct DeviceDescription {\n@@ -137,15 +131,6 @@ pub struct DeviceEvent {\n     pub std_event: Option<String>,\n }\n \n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DeviceEventsResponse {\n-    /// <p>An array of zero or more elements describing the event(s) associated with the\n-    /// device.</p>\n-    pub events: Option<Vec<DeviceEvent>>,\n-    /// <p>The token to retrieve the next set of results.</p>\n-    pub next_token: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct DeviceMethod {\n     /// <p>The type of the device, such as "button".</p>\n@@ -158,10 +143,6 @@ pub struct DeviceMethod {\n     pub method_name: Option<String>,\n }\n \n-/// <p>On success, an empty object is returned.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Empty {}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct FinalizeDeviceClaimRequest {\n     /// <p>The unique identifier of the device.</p>\ndiff --git a/rusoto/services/kafka/src/generated.rs b/rusoto/services/kafka/src/generated.rs\nindex 42095b8c5..dfbbcfc1e 100644\n--- a/rusoto/services/kafka/src/generated.rs\n+++ b/rusoto/services/kafka/src/generated.rs\n@@ -426,15 +426,6 @@ pub struct EncryptionInfo {\n     pub encryption_at_rest: Option<EncryptionAtRest>,\n }\n \n-/// <p>Returns information about an error.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct KafkaError {\n-    /// <p>The parameter that caused the error.</p>\n-    pub invalid_parameter: Option<String>,\n-    /// <p>The description of the error.</p>\n-    pub message: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct GetBootstrapBrokersRequest {\n     /// <p>The Amazon Resource Name (ARN) that uniquely identifies the cluster.</p>\ndiff --git a/rusoto/services/mediaconvert/src/generated.rs b/rusoto/services/mediaconvert/src/generated.rs\nindex 982a96209..12e15e34b 100644\n--- a/rusoto/services/mediaconvert/src/generated.rs\n+++ b/rusoto/services/mediaconvert/src/generated.rs\n@@ -1306,11 +1306,6 @@ pub struct EsamSignalProcessingNotification {\n     pub scc_xml: Option<String>,\n }\n \n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ExceptionBody {\n-    pub message: Option<String>,\n-}\n-\n /// <p>Settings for F4v container</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct F4vSettings {\ndiff --git a/rusoto/services/medialive/src/generated.rs b/rusoto/services/medialive/src/generated.rs\nindex 783f192bc..ef5c09873 100644\n--- a/rusoto/services/medialive/src/generated.rs\n+++ b/rusoto/services/medialive/src/generated.rs\n@@ -101,12 +101,6 @@ pub struct Ac3Settings {\n     pub metadata_control: Option<String>,\n }\n \n-/// <p>Placeholder documentation for AccessDenied</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct AccessDenied {\n-    pub message: Option<String>,\n-}\n-\n /// <p>Archive Container Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct ArchiveContainerSettings {\n@@ -414,15 +408,6 @@ pub struct BatchUpdateScheduleResponse {\n     pub deletes: Option<BatchScheduleActionDeleteResult>,\n }\n \n-/// <p>Results of a batch schedule update.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct BatchUpdateScheduleResult {\n-    /// <p>Schedule actions created in the schedule.</p>\n-    pub creates: Option<BatchScheduleActionCreateResult>,\n-    /// <p>Schedule actions deleted from the schedule.</p>\n-    pub deletes: Option<BatchScheduleActionDeleteResult>,\n-}\n-\n /// <p>Blackout Slate</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct BlackoutSlate {\n@@ -699,14 +684,6 @@ pub struct Channel {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Placeholder documentation for ChannelConfigurationValidationError</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ChannelConfigurationValidationError {\n-    pub message: Option<String>,\n-    /// <p>A collection of validation error responses.</p>\n-    pub validation_errors: Option<Vec<ValidationError>>,\n-}\n-\n /// <p>Placeholder documentation for ChannelEgressEndpoint</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -775,30 +752,6 @@ pub struct ChannelSummary {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Placeholder documentation for CreateChannel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateChannel {\n-    /// <p>The class for this channel. STANDARD for a channel with two pipelines or SINGLE_PIPELINE for a channel with one pipeline.</p>\n-    pub channel_class: Option<String>,\n-    pub destinations: Option<Vec<OutputDestination>>,\n-    pub encoder_settings: Option<EncoderSettings>,\n-    /// <p>List of input attachments for channel.</p>\n-    pub input_attachments: Option<Vec<InputAttachment>>,\n-    /// <p>Specification of input for this channel (max. bitrate, resolution, codec, etc.)</p>\n-    pub input_specification: Option<InputSpecification>,\n-    /// <p>The log level to write to CloudWatch Logs.</p>\n-    pub log_level: Option<String>,\n-    /// <p>Name of channel.</p>\n-    pub name: Option<String>,\n-    /// <p>Unique request ID to be specified. This is needed to prevent retries from\n-    /// creating multiple resources.</p>\n-    pub request_id: Option<String>,\n-    /// <p>An optional Amazon Resource Name (ARN) of the role to assume when running the Channel.</p>\n-    pub role_arn: Option<String>,\n-    /// <p>A collection of key-value pairs.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n /// <p>A request to create a channel</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateChannelRequest {\n@@ -852,40 +805,6 @@ pub struct CreateChannelResponse {\n     pub channel: Option<Channel>,\n }\n \n-/// <p>Placeholder documentation for CreateChannelResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateChannelResultModel {\n-    pub channel: Option<Channel>,\n-}\n-\n-/// <p>Placeholder documentation for CreateInput</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateInput {\n-    /// <p>Destination settings for PUSH type inputs.</p>\n-    pub destinations: Option<Vec<InputDestinationRequest>>,\n-    /// <p>A list of security groups referenced by IDs to attach to the input.</p>\n-    pub input_security_groups: Option<Vec<String>>,\n-    /// <p>A list of the MediaConnect Flows that you want to use in this input. You can specify as few as one\n-    /// Flow and presently, as many as two. The only requirement is when you have more than one is that each Flow is in a\n-    /// separate Availability Zone as this ensures your EML input is redundant to AZ issues.</p>\n-    pub media_connect_flows: Option<Vec<MediaConnectFlowRequest>>,\n-    /// <p>Name of the input.</p>\n-    pub name: Option<String>,\n-    /// <p>Unique identifier of the request to ensure the request is handled\n-    /// exactly once in case of retries.</p>\n-    pub request_id: Option<String>,\n-    /// <p>The Amazon Resource Name (ARN) of the role this input assumes during and after creation.</p>\n-    pub role_arn: Option<String>,\n-    /// <p>The source URLs for a PULL-type input. Every PULL type input needs\n-    /// exactly two source URLs for redundancy.\n-    /// Only specify sources for PULL type Inputs. Leave Destinations empty.</p>\n-    pub sources: Option<Vec<InputSourceRequest>>,\n-    /// <p>A collection of key-value pairs.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-    pub type_: Option<String>,\n-    pub vpc: Option<InputVpcRequest>,\n-}\n-\n /// <p>The name of the input</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateInputRequest {\n@@ -943,12 +862,6 @@ pub struct CreateInputResponse {\n     pub input: Option<Input>,\n }\n \n-/// <p>Placeholder documentation for CreateInputResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateInputResultModel {\n-    pub input: Option<Input>,\n-}\n-\n /// <p>The IPv4 CIDRs to whitelist for this Input Security Group</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateInputSecurityGroupRequest {\n@@ -971,12 +884,6 @@ pub struct CreateInputSecurityGroupResponse {\n     pub security_group: Option<InputSecurityGroup>,\n }\n \n-/// <p>Placeholder documentation for CreateInputSecurityGroupResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateInputSecurityGroupResultModel {\n-    pub security_group: Option<InputSecurityGroup>,\n-}\n-\n /// <p>Placeholder documentation for CreateTagsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateTagsRequest {\n@@ -1776,10 +1683,6 @@ pub struct EmbeddedSourceSettings {\n     pub source_608_track_number: Option<i64>,\n }\n \n-/// <p>Placeholder documentation for Empty</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Empty {}\n-\n /// <p>Encoder Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct EncoderSettings {\n@@ -2629,15 +2532,6 @@ pub struct InputSecurityGroup {\n     pub whitelist_rules: Option<Vec<InputWhitelistRule>>,\n }\n \n-/// <p>Request of IPv4 CIDR addresses to whitelist in a security group.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct InputSecurityGroupWhitelistRequest {\n-    /// <p>A collection of key-value pairs.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>List of IPv4 CIDR addresses to whitelist</p>\n-    pub whitelist_rules: Option<Vec<InputWhitelistRuleCidr>>,\n-}\n-\n /// <p>Live Event input parameters. There can be multiple inputs in a single Live Event.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct InputSettings {\n@@ -2780,18 +2674,6 @@ pub struct InputWhitelistRuleCidr {\n     pub cidr: Option<String>,\n }\n \n-/// <p>Placeholder documentation for InternalServiceError</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct InternalServiceError {\n-    pub message: Option<String>,\n-}\n-\n-/// <p>Placeholder documentation for InvalidRequest</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct InvalidRequest {\n-    pub message: Option<String>,\n-}\n-\n /// <p>Key Provider Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct KeyProviderSettings {\n@@ -2800,12 +2682,6 @@ pub struct KeyProviderSettings {\n     pub static_key_settings: Option<StaticKeySettings>,\n }\n \n-/// <p>Placeholder documentation for LimitExceeded</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct LimitExceeded {\n-    pub message: Option<String>,\n-}\n-\n /// <p>Placeholder documentation for ListChannelsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListChannelsRequest {\n@@ -2829,13 +2705,6 @@ pub struct ListChannelsResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>Placeholder documentation for ListChannelsResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListChannelsResultModel {\n-    pub channels: Option<Vec<ChannelSummary>>,\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Placeholder documentation for ListInputSecurityGroupsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListInputSecurityGroupsRequest {\n@@ -2860,14 +2729,6 @@ pub struct ListInputSecurityGroupsResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>Result of input security group list request</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListInputSecurityGroupsResultModel {\n-    /// <p>List of input security groups</p>\n-    pub input_security_groups: Option<Vec<InputSecurityGroup>>,\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Placeholder documentation for ListInputsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListInputsRequest {\n@@ -2891,13 +2752,6 @@ pub struct ListInputsResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>Placeholder documentation for ListInputsResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListInputsResultModel {\n-    pub inputs: Option<Vec<Input>>,\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Placeholder documentation for ListOfferingsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListOfferingsRequest {\n@@ -2959,15 +2813,6 @@ pub struct ListOfferingsResponse {\n     pub offerings: Option<Vec<Offering>>,\n }\n \n-/// <p>ListOfferings response</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListOfferingsResultModel {\n-    /// <p>Token to retrieve the next page of results</p>\n-    pub next_token: Option<String>,\n-    /// <p>List of offerings</p>\n-    pub offerings: Option<Vec<Offering>>,\n-}\n-\n /// <p>Placeholder documentation for ListReservationsRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListReservationsRequest {\n@@ -3025,15 +2870,6 @@ pub struct ListReservationsResponse {\n     pub reservations: Option<Vec<Reservation>>,\n }\n \n-/// <p>ListReservations response</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListReservationsResultModel {\n-    /// <p>Token to retrieve the next page of results</p>\n-    pub next_token: Option<String>,\n-    /// <p>List of reservations</p>\n-    pub reservations: Option<Vec<Reservation>>,\n-}\n-\n /// <p>Placeholder documentation for ListTagsForResourceRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListTagsForResourceRequest {\n@@ -3686,21 +3522,6 @@ pub struct PipelinePauseStateSettings {\n     pub pipeline_id: String,\n }\n \n-/// <p>PurchaseOffering request</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct PurchaseOffering {\n-    /// <p>Number of resources</p>\n-    pub count: i64,\n-    /// <p>Name for the new reservation</p>\n-    pub name: Option<String>,\n-    /// <p>Unique request ID to be specified. This is needed to prevent retries from creating multiple resources.</p>\n-    pub request_id: Option<String>,\n-    /// <p>Requested reservation start time (UTC) in ISO-8601 format. The specified time must be between the first day of the current month and one year from now. If no value is given, the default is now.</p>\n-    pub start: Option<String>,\n-    /// <p>A collection of key-value pairs</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n /// <p>Placeholder documentation for PurchaseOfferingRequest</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct PurchaseOfferingRequest {\n@@ -3737,12 +3558,6 @@ pub struct PurchaseOfferingResponse {\n     pub reservation: Option<Reservation>,\n }\n \n-/// <p>PurchaseOffering response</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct PurchaseOfferingResultModel {\n-    pub reservation: Option<Reservation>,\n-}\n-\n /// <p>Remix Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct RemixSettings {\n@@ -3876,18 +3691,6 @@ pub struct ReservationResourceSpecification {\n     pub video_quality: Option<String>,\n }\n \n-/// <p>Placeholder documentation for ResourceConflict</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ResourceConflict {\n-    pub message: Option<String>,\n-}\n-\n-/// <p>Placeholder documentation for ResourceNotFound</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ResourceNotFound {\n-    pub message: Option<String>,\n-}\n-\n /// <p>Rtmp Caption Info Destination Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct RtmpCaptionInfoDestinationSettings {}\n@@ -4010,19 +3813,6 @@ pub struct ScheduleActionStartSettings {\n     pub follow_mode_schedule_action_start_settings: Option<FollowModeScheduleActionStartSettings>,\n }\n \n-/// <p>Result of a schedule deletion.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ScheduleDeleteResultModel {}\n-\n-/// <p>Results of a schedule describe.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ScheduleDescribeResultModel {\n-    /// <p>The next token; for use in pagination.</p>\n-    pub next_token: Option<String>,\n-    /// <p>The list of actions in the schedule.</p>\n-    pub schedule_actions: Vec<ScheduleAction>,\n-}\n-\n /// <p>Scte20 Plus Embedded Destination Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct Scte20PlusEmbeddedDestinationSettings {}\n@@ -4421,12 +4211,6 @@ pub struct StopChannelResponse {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Placeholder documentation for TagsModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct TagsModel {\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n /// <p>Teletext Destination Settings</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct TeletextDestinationSettings {}\n@@ -4507,33 +4291,6 @@ pub struct UdpOutputSettings {\n     pub fec_output_settings: Option<FecOutputSettings>,\n }\n \n-/// <p>Placeholder documentation for UpdateChannel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateChannel {\n-    /// <p>A list of output destinations for this channel.</p>\n-    pub destinations: Option<Vec<OutputDestination>>,\n-    /// <p>The encoder settings for this channel.</p>\n-    pub encoder_settings: Option<EncoderSettings>,\n-    pub input_attachments: Option<Vec<InputAttachment>>,\n-    /// <p>Specification of input for this channel (max. bitrate, resolution, codec, etc.)</p>\n-    pub input_specification: Option<InputSpecification>,\n-    /// <p>The log level to write to CloudWatch Logs.</p>\n-    pub log_level: Option<String>,\n-    /// <p>The name of the channel.</p>\n-    pub name: Option<String>,\n-    /// <p>An optional Amazon Resource Name (ARN) of the role to assume when running the Channel. If you do not specify this on an update call but the role was previously set that role will be removed.</p>\n-    pub role_arn: Option<String>,\n-}\n-\n-/// <p>Placeholder documentation for UpdateChannelClass</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateChannelClass {\n-    /// <p>The channel class that you wish to update this channel to use.</p>\n-    pub channel_class: String,\n-    /// <p>A list of output destinations for this channel.</p>\n-    pub destinations: Option<Vec<OutputDestination>>,\n-}\n-\n /// <p>Channel class that the channel should be updated to.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateChannelClassRequest {\n@@ -4602,33 +4359,6 @@ pub struct UpdateChannelResponse {\n     pub channel: Option<Channel>,\n }\n \n-/// <p>The updated channel&#39;s description.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateChannelResultModel {\n-    pub channel: Option<Channel>,\n-}\n-\n-/// <p>Placeholder documentation for UpdateInput</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateInput {\n-    /// <p>Destination settings for PUSH type inputs.</p>\n-    pub destinations: Option<Vec<InputDestinationRequest>>,\n-    /// <p>A list of security groups referenced by IDs to attach to the input.</p>\n-    pub input_security_groups: Option<Vec<String>>,\n-    /// <p>A list of the MediaConnect Flow ARNs that you want to use as the source of the input. You can specify as few as one\n-    /// Flow and presently, as many as two. The only requirement is when you have more than one is that each Flow is in a\n-    /// separate Availability Zone as this ensures your EML input is redundant to AZ issues.</p>\n-    pub media_connect_flows: Option<Vec<MediaConnectFlowRequest>>,\n-    /// <p>Name of the input.</p>\n-    pub name: Option<String>,\n-    /// <p>The Amazon Resource Name (ARN) of the role this input assumes during and after creation.</p>\n-    pub role_arn: Option<String>,\n-    /// <p>The source URLs for a PULL-type input. Every PULL type input needs\n-    /// exactly two source URLs for redundancy.\n-    /// Only specify sources for PULL type Inputs. Leave Destinations empty.</p>\n-    pub sources: Option<Vec<InputSourceRequest>>,\n-}\n-\n /// <p>A request to update an input.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateInputRequest {\n@@ -4674,12 +4404,6 @@ pub struct UpdateInputResponse {\n     pub input: Option<Input>,\n }\n \n-/// <p>Placeholder documentation for UpdateInputResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateInputResultModel {\n-    pub input: Option<Input>,\n-}\n-\n /// <p>The request to update some combination of the Input Security Group name and the IPv4 CIDRs the Input Security Group should allow.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateInputSecurityGroupRequest {\n@@ -4705,19 +4429,6 @@ pub struct UpdateInputSecurityGroupResponse {\n     pub security_group: Option<InputSecurityGroup>,\n }\n \n-/// <p>Placeholder documentation for UpdateInputSecurityGroupResultModel</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateInputSecurityGroupResultModel {\n-    pub security_group: Option<InputSecurityGroup>,\n-}\n-\n-/// <p>UpdateReservation request</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateReservation {\n-    /// <p>Name of the reservation</p>\n-    pub name: Option<String>,\n-}\n-\n /// <p>Request to update a reservation</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateReservationRequest {\n@@ -4739,12 +4450,6 @@ pub struct UpdateReservationResponse {\n     pub reservation: Option<Reservation>,\n }\n \n-/// <p>UpdateReservation response</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateReservationResultModel {\n-    pub reservation: Option<Reservation>,\n-}\n-\n /// <p>Placeholder documentation for ValidationError</p>\n #[derive(Default, Debug, Clone, PartialEq)]\n pub struct ValidationError {\ndiff --git a/rusoto/services/mediapackage/src/generated.rs b/rusoto/services/mediapackage/src/generated.rs\nindex ceba2cf62..6be5258be 100644\n--- a/rusoto/services/mediapackage/src/generated.rs\n+++ b/rusoto/services/mediapackage/src/generated.rs\n@@ -49,33 +49,6 @@ pub struct Channel {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Configuration parameters for a new Channel.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ChannelCreateParameters {\n-    /// <p>A short text description of the Channel.</p>\n-    pub description: Option<String>,\n-    /// <p>The ID of the Channel. The ID must be unique within the region and it\n-    /// cannot be changed after a Channel is created.</p>\n-    pub id: String,\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n-/// <p>A collection of Channel records.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ChannelList {\n-    /// <p>A list of Channel records.</p>\n-    pub channels: Option<Vec<Channel>>,\n-    /// <p>A token that can be used to resume pagination from the end of the collection.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Configuration parameters for updating an existing Channel.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ChannelUpdateParameters {\n-    /// <p>A short text description of the Channel.</p>\n-    pub description: Option<String>,\n-}\n-\n /// <p>A Common Media Application Format (CMAF) encryption configuration.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct CmafEncryption {\n@@ -825,64 +798,6 @@ pub struct OriginEndpoint {\n     pub whitelist: Option<Vec<String>>,\n }\n \n-/// <p>Configuration parameters for a new OriginEndpoint.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct OriginEndpointCreateParameters {\n-    /// <p>The ID of the Channel that the OriginEndpoint will be associated with.\n-    /// This cannot be changed after the OriginEndpoint is created.</p>\n-    pub channel_id: String,\n-    pub cmaf_package: Option<CmafPackageCreateOrUpdateParameters>,\n-    pub dash_package: Option<DashPackage>,\n-    /// <p>A short text description of the OriginEndpoint.</p>\n-    pub description: Option<String>,\n-    pub hls_package: Option<HlsPackage>,\n-    /// <p>The ID of the OriginEndpoint.  The ID must be unique within the region\n-    /// and it cannot be changed after the OriginEndpoint is created.</p>\n-    pub id: String,\n-    /// <p>A short string that will be used as the filename of the OriginEndpoint URL (defaults to &quot;index&quot;).</p>\n-    pub manifest_name: Option<String>,\n-    pub mss_package: Option<MssPackage>,\n-    /// <p>Maximum duration (seconds) of content to retain for startover playback.\n-    /// If not specified, startover playback will be disabled for the OriginEndpoint.</p>\n-    pub startover_window_seconds: Option<i64>,\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>Amount of delay (seconds) to enforce on the playback of live content.\n-    /// If not specified, there will be no time delay in effect for the OriginEndpoint.</p>\n-    pub time_delay_seconds: Option<i64>,\n-    /// <p>A list of source IP CIDR blocks that will be allowed to access the OriginEndpoint.</p>\n-    pub whitelist: Option<Vec<String>>,\n-}\n-\n-/// <p>A collection of OriginEndpoint records.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct OriginEndpointList {\n-    /// <p>A token that can be used to resume pagination from the end of the collection.</p>\n-    pub next_token: Option<String>,\n-    /// <p>A list of OriginEndpoint records.</p>\n-    pub origin_endpoints: Option<Vec<OriginEndpoint>>,\n-}\n-\n-/// <p>Configuration parameters for updating an existing OriginEndpoint.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct OriginEndpointUpdateParameters {\n-    pub cmaf_package: Option<CmafPackageCreateOrUpdateParameters>,\n-    pub dash_package: Option<DashPackage>,\n-    /// <p>A short text description of the OriginEndpoint.</p>\n-    pub description: Option<String>,\n-    pub hls_package: Option<HlsPackage>,\n-    /// <p>A short string that will be appended to the end of the Endpoint URL.</p>\n-    pub manifest_name: Option<String>,\n-    pub mss_package: Option<MssPackage>,\n-    /// <p>Maximum duration (in seconds) of content to retain for startover playback.\n-    /// If not specified, startover playback will be disabled for the OriginEndpoint.</p>\n-    pub startover_window_seconds: Option<i64>,\n-    /// <p>Amount of delay (in seconds) to enforce on the playback of live content.\n-    /// If not specified, there will be no time delay in effect for the OriginEndpoint.</p>\n-    pub time_delay_seconds: Option<i64>,\n-    /// <p>A list of source IP CIDR blocks that will be allowed to access the OriginEndpoint.</p>\n-    pub whitelist: Option<Vec<String>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct RotateChannelCredentialsRequest {\n     /// <p>The ID of the channel to update.</p>\n@@ -995,11 +910,6 @@ pub struct TagResourceRequest {\n     pub tags: ::std::collections::HashMap<String, String>,\n }\n \n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct TagsModel {\n-    pub tags: ::std::collections::HashMap<String, String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UntagResourceRequest {\n     #[serde(rename = "ResourceArn")]\ndiff --git a/rusoto/services/mediatailor/src/generated.rs b/rusoto/services/mediatailor/src/generated.rs\nindex 89279806c..38cfa8c2e 100644\n--- a/rusoto/services/mediatailor/src/generated.rs\n+++ b/rusoto/services/mediatailor/src/generated.rs\n@@ -80,9 +80,6 @@ pub struct DeletePlaybackConfigurationRequest {\n #[cfg_attr(test, derive(Serialize))]\n pub struct DeletePlaybackConfigurationResponse {}\n \n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Empty {}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct GetPlaybackConfigurationRequest {\n     /// <p>The identifier for the playback configuration.</p>\n@@ -357,18 +354,6 @@ pub struct TagResourceRequest {\n     pub tags: ::std::collections::HashMap<String, String>,\n }\n \n-/// <p>A set of tags assigned to a resource. </p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct TagsModel {\n-    /// <p>A comma-separated list of tag key:value pairs. For example:\n-    /// {\n-    /// "Key1": "Value1",\n-    /// "Key2": "Value2"\n-    /// }\n-    /// </p>\n-    pub tags: ::std::collections::HashMap<String, String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UntagResourceRequest {\n     /// <p>The Amazon Resource Name (ARN) for the playback configuration. You can get this from the response to any playback configuration request. </p>\ndiff --git a/rusoto/services/mq/src/generated.rs b/rusoto/services/mq/src/generated.rs\nindex 831a23c7e..07e800d5d 100644\n--- a/rusoto/services/mq/src/generated.rs\n+++ b/rusoto/services/mq/src/generated.rs\n@@ -49,17 +49,6 @@ pub struct BrokerEngineType {\n     pub engine_versions: Option<Vec<EngineVersion>>,\n }\n \n-/// <p>Returns a list of broker engine type.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct BrokerEngineTypeOutput {\n-    /// <p>List of available engine types and versions.</p>\n-    pub broker_engine_types: Option<Vec<BrokerEngineType>>,\n-    /// <p>Required. The maximum number of engine types that can be returned per page (20 by default). This value must be an integer from 5 to 100.</p>\n-    pub max_results: Option<i64>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>Returns information about all brokers.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -100,17 +89,6 @@ pub struct BrokerInstanceOption {\n     pub supported_engine_versions: Option<Vec<String>>,\n }\n \n-/// <p>Returns a list of broker instance options.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct BrokerInstanceOptionsOutput {\n-    /// <p>List of available broker instance options.</p>\n-    pub broker_instance_options: Option<Vec<BrokerInstanceOption>>,\n-    /// <p>Required. The maximum number of instance options that can be returned per page (20 by default). This value must be an integer from 5 to 100.</p>\n-    pub max_results: Option<i64>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>The Amazon Resource Name (ARN) of the broker.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -236,50 +214,6 @@ pub struct Configurations {\n     pub pending: Option<ConfigurationId>,\n }\n \n-/// <p>Required. The time period during which Amazon MQ applies pending updates or patches to the broker.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateBrokerInput {\n-    /// <p>Required. Enables automatic upgrades to new minor versions for brokers, as Apache releases the versions. The automatic upgrades occur during the maintenance window of the broker or after a manual broker reboot.</p>\n-    pub auto_minor_version_upgrade: Option<bool>,\n-    /// <p>Required. The name of the broker. This value must be unique in your AWS account, 1-50 characters long, must contain only letters, numbers, dashes, and underscores, and must not contain whitespaces, brackets, wildcard characters, or special characters.</p>\n-    pub broker_name: Option<String>,\n-    /// <p>A list of information about the configuration.</p>\n-    pub configuration: Option<ConfigurationId>,\n-    /// <p>The unique ID that the requester receives for the created broker. Amazon MQ passes your ID with the API action. Note: We recommend using a Universally Unique Identifier (UUID) for the creatorRequestId. You may omit the creatorRequestId if your application doesn&#39;t require idempotency.</p>\n-    pub creator_request_id: Option<String>,\n-    /// <p>Required. The deployment mode of the broker.</p>\n-    pub deployment_mode: Option<String>,\n-    /// <p>Required. The type of broker engine. Note: Currently, Amazon MQ supports only ACTIVEMQ.</p>\n-    pub engine_type: Option<String>,\n-    /// <p>Required. The version of the broker engine. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub engine_version: Option<String>,\n-    /// <p>Required. The broker&#39;s instance type.</p>\n-    pub host_instance_type: Option<String>,\n-    /// <p>Enables Amazon CloudWatch logging for brokers.</p>\n-    pub logs: Option<Logs>,\n-    /// <p>The parameters that determine the WeeklyStartTime.</p>\n-    pub maintenance_window_start_time: Option<WeeklyStartTime>,\n-    /// <p>Required. Enables connections from applications outside of the VPC that hosts the broker&#39;s subnets.</p>\n-    pub publicly_accessible: Option<bool>,\n-    /// <p>The list of rules (1 minimum, 125 maximum) that authorize connections to brokers.</p>\n-    pub security_groups: Option<Vec<String>>,\n-    /// <p>The list of groups (2 maximum) that define which subnets and IP ranges the broker can use from different Availability Zones. A SINGLE<em>INSTANCE deployment requires one subnet (for example, the default subnet). An ACTIVE</em>STANDBY<em>MULTI</em>AZ deployment requires two subnets.</p>\n-    pub subnet_ids: Option<Vec<String>>,\n-    /// <p>Create tags when creating the broker.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>Required. The list of ActiveMQ users (persons or applications) who can access queues and topics. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long.</p>\n-    pub users: Option<Vec<User>>,\n-}\n-\n-/// <p>Returns information about the created broker.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateBrokerOutput {\n-    /// <p>The Amazon Resource Name (ARN) of the broker.</p>\n-    pub broker_arn: Option<String>,\n-    /// <p>The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-}\n-\n /// <p>Creates a broker using the specified properties.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateBrokerRequest {\n@@ -358,34 +292,6 @@ pub struct CreateBrokerResponse {\n     pub broker_id: Option<String>,\n }\n \n-/// <p>Creates a new configuration for the specified configuration name. Amazon MQ uses the default configuration (the engine type and version).</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateConfigurationInput {\n-    /// <p>Required. The type of broker engine. Note: Currently, Amazon MQ supports only ACTIVEMQ.</p>\n-    pub engine_type: Option<String>,\n-    /// <p>Required. The version of the broker engine. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub engine_version: Option<String>,\n-    /// <p>Required. The name of the configuration. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 1-150 characters long.</p>\n-    pub name: Option<String>,\n-    /// <p>Create tags when creating the configuration.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n-/// <p>Returns information about the created configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateConfigurationOutput {\n-    /// <p>Required. The Amazon Resource Name (ARN) of the configuration.</p>\n-    pub arn: Option<String>,\n-    /// <p>Required. The date and time of the configuration.</p>\n-    pub created: Option<f64>,\n-    /// <p>Required. The unique ID that Amazon MQ generates for the configuration.</p>\n-    pub id: Option<String>,\n-    /// <p>The latest revision of the configuration.</p>\n-    pub latest_revision: Option<ConfigurationRevision>,\n-    /// <p>Required. The name of the configuration. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 1-150 characters long.</p>\n-    pub name: Option<String>,\n-}\n-\n /// <p>Creates a new configuration for the specified configuration name. Amazon MQ uses the default configuration (the engine type and version).</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateConfigurationRequest {\n@@ -444,17 +350,6 @@ pub struct CreateTagsRequest {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Creates a new ActiveMQ user.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateUserInput {\n-    /// <p>Enables access to the the ActiveMQ Web Console for the ActiveMQ user.</p>\n-    pub console_access: Option<bool>,\n-    /// <p>The list of groups (20 maximum) to which the ActiveMQ user belongs. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long.</p>\n-    pub groups: Option<Vec<String>>,\n-    /// <p>Required. The password of the user. This value must be at least 12 characters long, must contain at least 4 unique characters, and must not contain commas.</p>\n-    pub password: Option<String>,\n-}\n-\n /// <p>Creates a new ActiveMQ user.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateUserRequest {\n@@ -482,13 +377,6 @@ pub struct CreateUserRequest {\n #[cfg_attr(test, derive(Serialize))]\n pub struct CreateUserResponse {}\n \n-/// <p>Returns information about the deleted broker.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DeleteBrokerOutput {\n-    /// <p>The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct DeleteBrokerRequest {\n     /// <p>The name of the broker. This value must be unique in your AWS account, 1-50 characters long, must contain only letters, numbers, dashes, and underscores, and must not contain whitespaces, brackets, wildcard characters, or special characters.</p>\n@@ -599,51 +487,6 @@ pub struct DescribeBrokerInstanceOptionsResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>The version of the broker engine. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DescribeBrokerOutput {\n-    /// <p>Required. Enables automatic upgrades to new minor versions for brokers, as Apache releases the versions. The automatic upgrades occur during the maintenance window of the broker or after a manual broker reboot.</p>\n-    pub auto_minor_version_upgrade: Option<bool>,\n-    /// <p>The Amazon Resource Name (ARN) of the broker.</p>\n-    pub broker_arn: Option<String>,\n-    /// <p>The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-    /// <p>A list of information about allocated brokers.</p>\n-    pub broker_instances: Option<Vec<BrokerInstance>>,\n-    /// <p>The name of the broker. This value must be unique in your AWS account, 1-50 characters long, must contain only letters, numbers, dashes, and underscores, and must not contain whitespaces, brackets, wildcard characters, or special characters.</p>\n-    pub broker_name: Option<String>,\n-    /// <p>The status of the broker.</p>\n-    pub broker_state: Option<String>,\n-    /// <p>The list of all revisions for the specified configuration.</p>\n-    pub configurations: Option<Configurations>,\n-    /// <p>The time when the broker was created.</p>\n-    pub created: Option<f64>,\n-    /// <p>Required. The deployment mode of the broker.</p>\n-    pub deployment_mode: Option<String>,\n-    /// <p>Required. The type of broker engine. Note: Currently, Amazon MQ supports only ACTIVEMQ.</p>\n-    pub engine_type: Option<String>,\n-    /// <p>The version of the broker engine. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub engine_version: Option<String>,\n-    /// <p>The broker&#39;s instance type.</p>\n-    pub host_instance_type: Option<String>,\n-    /// <p>The list of information about logs currently enabled and pending to be deployed for the specified broker.</p>\n-    pub logs: Option<LogsSummary>,\n-    /// <p>The parameters that determine the WeeklyStartTime.</p>\n-    pub maintenance_window_start_time: Option<WeeklyStartTime>,\n-    /// <p>The version of the broker engine to upgrade to. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub pending_engine_version: Option<String>,\n-    /// <p>Required. Enables connections from applications outside of the VPC that hosts the broker&#39;s subnets.</p>\n-    pub publicly_accessible: Option<bool>,\n-    /// <p>Required. The list of rules (1 minimum, 125 maximum) that authorize connections to brokers.</p>\n-    pub security_groups: Option<Vec<String>>,\n-    /// <p>The list of groups (2 maximum) that define which subnets and IP ranges the broker can use from different Availability Zones. A SINGLE<em>INSTANCE deployment requires one subnet (for example, the default subnet). An ACTIVE</em>STANDBY<em>MULTI</em>AZ deployment requires two subnets.</p>\n-    pub subnet_ids: Option<Vec<String>>,\n-    /// <p>The list of all tags associated with this broker.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-    /// <p>The list of all ActiveMQ usernames for the specified broker.</p>\n-    pub users: Option<Vec<UserSummary>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct DescribeBrokerRequest {\n     /// <p>The name of the broker. This value must be unique in your AWS account, 1-50 characters long, must contain only letters, numbers, dashes, and underscores, and must not contain whitespaces, brackets, wildcard characters, or special characters.</p>\n@@ -784,19 +627,6 @@ pub struct DescribeConfigurationResponse {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Returns the specified configuration revision for the specified configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DescribeConfigurationRevisionOutput {\n-    /// <p>Required. The unique ID that Amazon MQ generates for the configuration.</p>\n-    pub configuration_id: Option<String>,\n-    /// <p>Required. The date and time of the configuration.</p>\n-    pub created: Option<f64>,\n-    /// <p>Required. The base64-encoded XML configuration.</p>\n-    pub data: Option<String>,\n-    /// <p>The description of the configuration.</p>\n-    pub description: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct DescribeConfigurationRevisionRequest {\n     /// <p>The unique ID that Amazon MQ generates for the configuration.</p>\n@@ -828,21 +658,6 @@ pub struct DescribeConfigurationRevisionResponse {\n     pub description: Option<String>,\n }\n \n-/// <p>Returns information about an ActiveMQ user.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct DescribeUserOutput {\n-    /// <p>Required. The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-    /// <p>Enables access to the the ActiveMQ Web Console for the ActiveMQ user.</p>\n-    pub console_access: Option<bool>,\n-    /// <p>The list of groups (20 maximum) to which the ActiveMQ user belongs. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long.</p>\n-    pub groups: Option<Vec<String>>,\n-    /// <p>The status of the changes pending for the ActiveMQ user.</p>\n-    pub pending: Option<UserPendingChanges>,\n-    /// <p>Required. The username of the ActiveMQ user. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long.</p>\n-    pub username: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct DescribeUserRequest {\n     /// <p>The unique ID that Amazon MQ generates for the broker.</p>\n@@ -888,24 +703,6 @@ pub struct EngineVersion {\n     pub name: Option<String>,\n }\n \n-/// <p>Returns information about an error.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct MQError {\n-    /// <p>The attribute which caused the error.</p>\n-    pub error_attribute: Option<String>,\n-    /// <p>The explanation of the error.</p>\n-    pub message: Option<String>,\n-}\n-\n-/// <p>A list of information about all brokers.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListBrokersOutput {\n-    /// <p>A list of information about all brokers.</p>\n-    pub broker_summaries: Option<Vec<BrokerSummary>>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListBrokersRequest {\n     /// <p>The maximum number of brokers that Amazon MQ can return per page (20 by default). This value must be an integer from 5 to 100.</p>\n@@ -931,19 +728,6 @@ pub struct ListBrokersResponse {\n     pub next_token: Option<String>,\n }\n \n-/// <p>Returns a list of all revisions for the specified configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListConfigurationRevisionsOutput {\n-    /// <p>The unique ID that Amazon MQ generates for the configuration.</p>\n-    pub configuration_id: Option<String>,\n-    /// <p>The maximum number of configuration revisions that can be returned per page (20 by default). This value must be an integer from 5 to 100.</p>\n-    pub max_results: Option<i64>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-    /// <p>The list of all revisions for the specified configuration.</p>\n-    pub revisions: Option<Vec<ConfigurationRevision>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListConfigurationRevisionsRequest {\n     /// <p>The unique ID that Amazon MQ generates for the configuration.</p>\n@@ -980,17 +764,6 @@ pub struct ListConfigurationRevisionsResponse {\n     pub revisions: Option<Vec<ConfigurationRevision>>,\n }\n \n-/// <p>Returns a list of all configurations.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListConfigurationsOutput {\n-    /// <p>The list of all revisions for the specified configuration.</p>\n-    pub configurations: Option<Vec<Configuration>>,\n-    /// <p>The maximum number of configurations that Amazon MQ can return per page (20 by default). This value must be an integer from 5 to 100.</p>\n-    pub max_results: Option<i64>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListConfigurationsRequest {\n     /// <p>The maximum number of configurations that Amazon MQ can return per page (20 by default). This value must be an integer from 5 to 100.</p>\n@@ -1036,19 +809,6 @@ pub struct ListTagsResponse {\n     pub tags: Option<::std::collections::HashMap<String, String>>,\n }\n \n-/// <p>Returns a list of all ActiveMQ users.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ListUsersOutput {\n-    /// <p>Required. The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-    /// <p>Required. The maximum number of ActiveMQ users that can be returned per page (20 by default). This value must be an integer from 5 to 100.</p>\n-    pub max_results: Option<i64>,\n-    /// <p>The token that specifies the next page of results Amazon MQ should return. To request the first page, leave nextToken empty.</p>\n-    pub next_token: Option<String>,\n-    /// <p>Required. The list of all ActiveMQ usernames for the specified broker.</p>\n-    pub users: Option<Vec<UserSummary>>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct ListUsersRequest {\n     /// <p>The unique ID that Amazon MQ generates for the broker.</p>\n@@ -1167,41 +927,6 @@ pub struct SanitizationWarning {\n     pub reason: Option<String>,\n }\n \n-/// <p>A map of the key-value pairs for the resource tag.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Tags {\n-    /// <p>The key-value pair for the resource tag.</p>\n-    pub tags: Option<::std::collections::HashMap<String, String>>,\n-}\n-\n-/// <p>Updates the broker using the specified properties.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateBrokerInput {\n-    /// <p>Enables automatic upgrades to new minor versions for brokers, as Apache releases the versions. The automatic upgrades occur during the maintenance window of the broker or after a manual broker reboot.</p>\n-    pub auto_minor_version_upgrade: Option<bool>,\n-    /// <p>A list of information about the configuration.</p>\n-    pub configuration: Option<ConfigurationId>,\n-    /// <p>The version of the broker engine. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub engine_version: Option<String>,\n-    /// <p>Enables Amazon CloudWatch logging for brokers.</p>\n-    pub logs: Option<Logs>,\n-}\n-\n-/// <p>Returns information about the updated broker.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateBrokerOutput {\n-    /// <p>The new value of automatic upgrades to new minor version for brokers.</p>\n-    pub auto_minor_version_upgrade: Option<bool>,\n-    /// <p>Required. The unique ID that Amazon MQ generates for the broker.</p>\n-    pub broker_id: Option<String>,\n-    /// <p>The ID of the updated configuration.</p>\n-    pub configuration: Option<ConfigurationId>,\n-    /// <p>The version of the broker engine to upgrade to. For a list of supported engine versions, see https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/broker-engine.html</p>\n-    pub engine_version: Option<String>,\n-    /// <p>The list of information about logs to be enabled for the specified broker.</p>\n-    pub logs: Option<Logs>,\n-}\n-\n /// <p>Updates the broker using the specified properties.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateBrokerRequest {\n@@ -1251,32 +976,6 @@ pub struct UpdateBrokerResponse {\n     pub logs: Option<Logs>,\n }\n \n-/// <p>Updates the specified configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateConfigurationInput {\n-    /// <p>Required. The base64-encoded XML configuration.</p>\n-    pub data: Option<String>,\n-    /// <p>The description of the configuration.</p>\n-    pub description: Option<String>,\n-}\n-\n-/// <p>Returns information about the updated configuration.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateConfigurationOutput {\n-    /// <p>Required. The Amazon Resource Name (ARN) of the configuration.</p>\n-    pub arn: Option<String>,\n-    /// <p>Required. The date and time of the configuration.</p>\n-    pub created: Option<f64>,\n-    /// <p>Required. The unique ID that Amazon MQ generates for the configuration.</p>\n-    pub id: Option<String>,\n-    /// <p>The latest revision of the configuration.</p>\n-    pub latest_revision: Option<ConfigurationRevision>,\n-    /// <p>Required. The name of the configuration. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 1-150 characters long.</p>\n-    pub name: Option<String>,\n-    /// <p>The list of the first 20 warnings about the configuration XML elements or attributes that were sanitized.</p>\n-    pub warnings: Option<Vec<SanitizationWarning>>,\n-}\n-\n /// <p>Updates the specified configuration.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateConfigurationRequest {\n@@ -1322,17 +1021,6 @@ pub struct UpdateConfigurationResponse {\n     pub warnings: Option<Vec<SanitizationWarning>>,\n }\n \n-/// <p>Updates the information for an ActiveMQ user.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateUserInput {\n-    /// <p>Enables access to the the ActiveMQ Web Console for the ActiveMQ user.</p>\n-    pub console_access: Option<bool>,\n-    /// <p>The list of groups (20 maximum) to which the ActiveMQ user belongs. This value can contain only alphanumeric characters, dashes, periods, underscores, and tildes (- . _ ~). This value must be 2-100 characters long.</p>\n-    pub groups: Option<Vec<String>>,\n-    /// <p>The password of the user. This value must be at least 12 characters long, must contain at least 4 unique characters, and must not contain commas.</p>\n-    pub password: Option<String>,\n-}\n-\n /// <p>Updates the information for an ActiveMQ user.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateUserRequest {\ndiff --git a/rusoto/services/serverlessrepo/src/generated.rs b/rusoto/services/serverlessrepo/src/generated.rs\nindex 4c97d4b2d..e3ba6c7cc 100644\n--- a/rusoto/services/serverlessrepo/src/generated.rs\n+++ b/rusoto/services/serverlessrepo/src/generated.rs\n@@ -25,42 +25,6 @@ use rusoto_core::param::{Params, ServiceParams};\n use rusoto_core::proto;\n use rusoto_core::signature::SignedRequest;\n use serde_json;\n-/// <p>Details about the application.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct Application {\n-    /// <p>The application Amazon Resource Name (ARN).</p>\n-    pub application_id: String,\n-    /// <p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";</p>\n-    pub author: String,\n-    /// <p>The date and time this resource was created.</p>\n-    pub creation_time: Option<String>,\n-    /// <p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>\n-    pub description: String,\n-    /// <p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>\n-    pub home_page_url: Option<String>,\n-    /// <p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: "^[a-zA-Z0-9+\\\\-_:\\\\/@]+$";</p>\n-    pub labels: Option<Vec<String>>,\n-    /// <p>A link to a license file of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p>\n-    pub license_url: Option<String>,\n-    /// <p>The name of the application.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: "[a-zA-Z0-9\\\\-]+";</p>\n-    pub name: String,\n-    /// <p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>\n-    pub readme_url: Option<String>,\n-    /// <p>A valid identifier from https://spdx.org/licenses/.</p>\n-    pub spdx_license_id: Option<String>,\n-    /// <p>Version information about the application.</p>\n-    pub version: Option<Version>,\n-}\n-\n-/// <p>A list of application summaries nested in the application.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ApplicationDependencyPage {\n-    /// <p>An array of application summaries nested in the application.</p>\n-    pub dependencies: Vec<ApplicationDependencySummary>,\n-    /// <p>The token to request the next page of results.</p>\n-    pub next_token: Option<String>,\n-}\n-\n /// <p>A nested application summary.</p>\n #[derive(Default, Debug, Clone, PartialEq, Deserialize)]\n #[cfg_attr(test, derive(Serialize))]\n@@ -73,22 +37,6 @@ pub struct ApplicationDependencySummary {\n     pub semantic_version: String,\n }\n \n-/// <p>A list of application details.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ApplicationPage {\n-    /// <p>An array of application summaries.</p>\n-    pub applications: Vec<ApplicationSummary>,\n-    /// <p>The token to request the next page of results.</p>\n-    pub next_token: Option<String>,\n-}\n-\n-/// <p>Policy statements applied to the application.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ApplicationPolicy {\n-    /// <p>An array of policy statements applied to the application.</p>\n-    pub statements: Vec<ApplicationPolicyStatement>,\n-}\n-\n /// <p>Policy statement applied to the application.</p>\n #[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]\n pub struct ApplicationPolicyStatement {\n@@ -139,70 +87,6 @@ pub struct ApplicationSummary {\n     pub spdx_license_id: Option<String>,\n }\n \n-/// <p>A list of version summaries for the application.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ApplicationVersionPage {\n-    /// <p>The token to request the next page of results.</p>\n-    pub next_token: Option<String>,\n-    /// <p>An array of version summaries for the application.</p>\n-    pub versions: Vec<VersionSummary>,\n-}\n-\n-/// <p>Details of the change set.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct ChangeSetDetails {\n-    /// <p>The application Amazon Resource Name (ARN).</p>\n-    pub application_id: String,\n-    /// <p>The Amazon Resource Name (ARN) of the change set.</p><p>Length constraints: Minimum length of 1.</p><p>Pattern: ARN:[-a-zA-Z0-9:/]*</p>\n-    pub change_set_id: String,\n-    /// <p>The semantic version of the application:</p><p>\n-    /// <a href="https://semver.org/">https://semver.org/</a>\n-    /// </p>\n-    pub semantic_version: String,\n-    /// <p>The unique ID of the stack.</p>\n-    pub stack_id: String,\n-}\n-\n-/// <p>Create an application request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateApplicationInput {\n-    /// <p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";</p>\n-    pub author: String,\n-    /// <p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>\n-    pub description: String,\n-    /// <p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>\n-    pub home_page_url: Option<String>,\n-    /// <p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: "^[a-zA-Z0-9+\\\\-_:\\\\/@]+$";</p>\n-    pub labels: Option<Vec<String>>,\n-    /// <p>A local text file that contains the license of the app that matches the spdxLicenseID value of your application.\n-    /// The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>\n-    pub license_body: Option<String>,\n-    /// <p>A link to the S3 object that contains the license of the app that matches the spdxLicenseID value of your application.</p><p>Maximum size 5 MB</p><p>You can specify only one of licenseBody and licenseUrl; otherwise, an error results.</p>\n-    pub license_url: Option<String>,\n-    /// <p>The name of the application that you want to publish.</p><p>Minimum length=1. Maximum length=140</p><p>Pattern: "[a-zA-Z0-9\\\\-]+";</p>\n-    pub name: String,\n-    /// <p>A local text readme file in Markdown language that contains a more detailed description of the application and how it works.\n-    /// The file has the format file://&lt;path>/&lt;filename>.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>\n-    pub readme_body: Option<String>,\n-    /// <p>A link to the S3 object in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p><p>You can specify only one of readmeBody and readmeUrl; otherwise, an error results.</p>\n-    pub readme_url: Option<String>,\n-    /// <p>The semantic version of the application:</p><p>\n-    /// <a href="https://semver.org/">https://semver.org/</a>\n-    /// </p>\n-    pub semantic_version: Option<String>,\n-    /// <p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>\n-    pub source_code_archive_url: Option<String>,\n-    /// <p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>\n-    pub source_code_url: Option<String>,\n-    /// <p>A valid identifier from <a href="https://spdx.org/licenses/">https://spdx.org/licenses/</a>.</p>\n-    pub spdx_license_id: Option<String>,\n-    /// <p>The local raw packaged AWS SAM template file of your application.\n-    /// The file has the format file://&lt;path>/&lt;filename>.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>\n-    pub template_body: Option<String>,\n-    /// <p>A link to the S3 object containing the packaged AWS SAM template of your application.</p><p>You can specify only one of templateBody and templateUrl; otherwise an error results.</p>\n-    pub template_url: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateApplicationRequest {\n     /// <p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";</p>\n@@ -318,19 +202,6 @@ pub struct CreateApplicationResponse {\n     pub version: Option<Version>,\n }\n \n-/// <p>Create a version request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateApplicationVersionInput {\n-    /// <p>A link to the S3 object that contains the ZIP archive of the source code for this version of your application.</p><p>Maximum size 50 MB</p>\n-    pub source_code_archive_url: Option<String>,\n-    /// <p>A link to a public repository for the source code of your application, for example the URL of a specific GitHub commit.</p>\n-    pub source_code_url: Option<String>,\n-    /// <p>The raw packaged AWS SAM template of your application.</p>\n-    pub template_body: Option<String>,\n-    /// <p>A link to the packaged AWS SAM template of your application.</p>\n-    pub template_url: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateApplicationVersionRequest {\n     /// <p>The Amazon Resource Name (ARN) of the application.</p>\n@@ -423,67 +294,6 @@ pub struct CreateApplicationVersionResponse {\n     pub template_url: Option<String>,\n }\n \n-/// <p>Create an application change set request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct CreateCloudFormationChangeSetInput {\n-    /// <p>A list of values that you must specify before you can deploy certain applications.\n-    /// Some applications might include resources that can affect permissions in your AWS\n-    /// account, for example, by creating new AWS Identity and Access Management (IAM) users.\n-    /// For those applications, you must explicitly acknowledge their capabilities by\n-    /// specifying this parameter.</p><p>The only valid values are CAPABILITY_IAM, CAPABILITY_NAMED_IAM,\n-    /// CAPABILITY_RESOURCE_POLICY, and CAPABILITY_AUTO_EXPAND.</p><p>The following resources require you to specify CAPABILITY_IAM or\n-    /// CAPABILITY_NAMED_IAM:\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-iam-group.html">AWS::IAM::Group</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-instanceprofile.html">AWS::IAM::InstanceProfile</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html">AWS::IAM::Policy</a>, and\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html">AWS::IAM::Role</a>.\n-    /// If the application contains IAM resources, you can specify either CAPABILITY_IAM\n-    /// or CAPABILITY_NAMED_IAM. If the application contains IAM resources\n-    /// with custom names, you must specify CAPABILITY_NAMED_IAM.</p><p>The following resources require you to specify CAPABILITY_RESOURCE_POLICY:\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lambda-permission.html">AWS::Lambda::Permission</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html">AWS::IAM:Policy</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-applicationautoscaling-scalingpolicy.html">AWS::ApplicationAutoScaling::ScalingPolicy</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-policy.html">AWS::S3::BucketPolicy</a>,\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sqs-policy.html">AWS::SQS::QueuePolicy</a>, and\n-    /// <a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-sns-policy.html">AWS::SNS:TopicPolicy</a>.</p><p>Applications that contain one or more nested applications require you to specify\n-    /// CAPABILITY_AUTO_EXPAND.</p><p>If your application template contains any of the above resources, we recommend that you review\n-    /// all permissions associated with the application before deploying. If you don\'t specify\n-    /// this parameter for an application that requires capabilities, the call will fail.</p>\n-    pub capabilities: Option<Vec<String>>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub change_set_name: Option<String>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub client_token: Option<String>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub description: Option<String>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub notification_arns: Option<Vec<String>>,\n-    /// <p>A list of parameter values for the parameters of the application.</p>\n-    pub parameter_overrides: Option<Vec<ParameterValue>>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub resource_types: Option<Vec<String>>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub rollback_configuration: Option<RollbackConfiguration>,\n-    /// <p>The semantic version of the application:</p><p>\n-    /// <a href="https://semver.org/">https://semver.org/</a>\n-    /// </p>\n-    pub semantic_version: Option<String>,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub stack_name: String,\n-    /// <p>This property corresponds to the parameter of the same name for the <i>AWS CloudFormation <a href="https://docs.aws.amazon.com/goto/WebAPI/cloudformation-2010-05-15/CreateChangeSet">CreateChangeSet</a>\n-    /// </i> API.</p>\n-    pub tags: Option<Vec<Tag>>,\n-    /// <p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>\n-    pub template_id: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct CreateCloudFormationChangeSetRequest {\n     /// <p>The Amazon Resource Name (ARN) of the application.</p>\n@@ -1010,47 +820,6 @@ pub struct Tag {\n     pub value: String,\n }\n \n-/// <p>Details of the template.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct TemplateDetails {\n-    /// <p>The application Amazon Resource Name (ARN).</p>\n-    pub application_id: String,\n-    /// <p>The date and time this resource was created.</p>\n-    pub creation_time: String,\n-    /// <p>The date and time this template expires. Templates\n-    /// expire 1 hour after creation.</p>\n-    pub expiration_time: String,\n-    /// <p>The semantic version of the application:</p><p>\n-    /// <a href="https://semver.org/">https://semver.org/</a>\n-    /// </p>\n-    pub semantic_version: String,\n-    /// <p>Status of the template creation workflow.</p><p>Possible values: PREPARING | ACTIVE | EXPIRED\n-    /// </p>\n-    pub status: String,\n-    /// <p>The UUID returned by CreateCloudFormationTemplate.</p><p>Pattern: [0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}</p>\n-    pub template_id: String,\n-    /// <p>A link to the template that can be used to deploy the application using\n-    /// AWS CloudFormation.</p>\n-    pub template_url: String,\n-}\n-\n-/// <p>Update the application request.</p>\n-#[derive(Default, Debug, Clone, PartialEq)]\n-pub struct UpdateApplicationInput {\n-    /// <p>The name of the author publishing the app.</p><p>Minimum length=1. Maximum length=127.</p><p>Pattern "^[a-z0-9](([a-z0-9]|-(?!-))*[a-z0-9])?$";</p>\n-    pub author: Option<String>,\n-    /// <p>The description of the application.</p><p>Minimum length=1. Maximum length=256</p>\n-    pub description: Option<String>,\n-    /// <p>A URL with more information about the application, for example the location of your GitHub repository for the application.</p>\n-    pub home_page_url: Option<String>,\n-    /// <p>Labels to improve discovery of apps in search results.</p><p>Minimum length=1. Maximum length=127. Maximum number of labels: 10</p><p>Pattern: "^[a-zA-Z0-9+\\\\-_:\\\\/@]+$";</p>\n-    pub labels: Option<Vec<String>>,\n-    /// <p>A text readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>\n-    pub readme_body: Option<String>,\n-    /// <p>A link to the readme file in Markdown language that contains a more detailed description of the application and how it works.</p><p>Maximum size 5 MB</p>\n-    pub readme_url: Option<String>,\n-}\n-\n #[derive(Default, Debug, Clone, PartialEq, Serialize)]\n pub struct UpdateApplicationRequest {\n     /// <p>The Amazon Resource Name (ARN) of the application.</p>\ndiff --git a/service_crategen/src/commands/generate/codegen/mod.rs b/service_crategen/src/commands/generate/codegen/mod.rs\nindex fbc271e19..76b644a06 100644\n--- a/service_crategen/src/commands/generate/codegen/mod.rs\n+++ b/service_crategen/src/commands/generate/codegen/mod.rs\n@@ -1,3 +1,4 @@\n+use std::collections::BTreeSet;\n use std::fs::File;\n use std::io::{BufWriter, Write};\n \n@@ -315,13 +316,36 @@ pub fn mutate_type_name_for_streaming(type_name: &str) -> String {\n     format!("Streaming{}", type_name)\n }\n \n+fn find_shapes_to_generate(service: &Service<\'_>) -> BTreeSet<String> {\n+    let mut shapes_to_generate = BTreeSet::<String>::new();\n+    let mut visitor = |shape_name: &str, _shape: &Shape| {\n+        shapes_to_generate.insert(shape_name.to_owned())\n+    };\n+    for (_, operation) in service.operations() {\n+        if let Some(ref input) = operation.input {\n+            service.visit_shapes(&input.shape, &mut visitor);\n+        }\n+        if let Some(ref output) = operation.output {\n+            service.visit_shapes(&output.shape, &mut visitor);\n+        }\n+        if let Some(ref errors) = operation.errors {\n+            for error in errors {\n+                service.visit_shapes(&error.shape, &mut visitor);\n+            }\n+        }\n+    }\n+    return shapes_to_generate;\n+} \n+\n fn generate_types<P>(writer: &mut FileWriter, service: &Service<\'_>, protocol_generator: &P) -> IoResult\n where\n     P: GenerateProtocol,\n {\n     let (serialized_types, deserialized_types) = filter_types(service);\n \n-    for (name, shape) in service.shapes().iter() {\n+    for name in find_shapes_to_generate(service).iter() {\n+        let shape = service.get_shape(name).unwrap();\n+\n         // We generate enums for error types, so no need to create model objects for them\n         // Kinesis is a special case in that some operations return\n         // responses whose struct fields refer to expecific error shapes\ndiff --git a/service_crategen/src/service.rs b/service_crategen/src/service.rs\nindex 76e2031e0..a8459236d 100644\n--- a/service_crategen/src/service.rs\n+++ b/service_crategen/src/service.rs\n@@ -205,4 +205,35 @@ impl<\'b> Service<\'b> {\n \n         dev_dependencies\n     }\n+\n+    pub fn visit_shapes<F>(&self, shape_name: &str, visitor: &mut F)\n+    where\n+        F: FnMut(&str, &Shape) -> bool\n+    {\n+        let shape = self\n+            .get_shape(shape_name)\n+            .expect("Shape missing from service definition");\n+\n+        if !visitor(shape_name, shape) {\n+            return;\n+        }\n+\n+        match shape.shape_type {\n+            ShapeType::Structure => {\n+                if let Some(ref members) = shape.members {\n+                    for member in members.values() {\n+                        self.visit_shapes(&member.shape, visitor);\n+                    }\n+                }\n+            }\n+            ShapeType::Map => {\n+                self.visit_shapes(shape.key_type(), visitor);\n+                self.visit_shapes(shape.value_type(), visitor);\n+            }\n+            ShapeType::List => {\n+                self.visit_shapes(shape.member_type(), visitor);\n+            }\n+            _ => {}\n+        }\n+    }\n }\n', 'commit_subject': 'Merge pull request #1428 from rusoto/fix/skip-type-generation-for-unused-shapes', 'repo_name': 'rusoto/rusoto', 'committer': {'name': 'GitHub', 'email': '1505422b2465e9a84f6fdfaa161078890c593f06@github.com', 'time_sec': '1559419816', 'tz_offset': '-420', 'date': {'seconds': '1559419816'}}, 'commit_tree': 'cc42a2e04ca427d48de0c827fb1f03fb8bda1ae5', 'commit_message': 'Merge pull request #1428 from rusoto/fix/skip-type-generation-for-unused-shapes\n\nskip type generation for unused shapes', 'language_name': 'Rust', 'license': 'mit', 'hunks': '@@ -205,4 +205,35 @@ impl<\'b> Service<\'b> {\n \n         dev_dependencies\n     }\n+\n+    pub fn visit_shapes<F>(&self, shape_name: &str, visitor: &mut F)\n+    where\n+        F: FnMut(&str, &Shape) -> bool\n+    {\n+        let shape = self\n+            .get_shape(shape_name)\n+            .expect("Shape missing from service definition");\n+\n+        if !visitor(shape_name, shape) {\n+            return;\n+        }\n+\n+        match shape.shape_type {\n+            ShapeType::Structure => {\n+                if let Some(ref members) = shape.members {\n+                    for member in members.values() {\n+                        self.visit_shapes(&member.shape, visitor);\n+                    }\n+                }\n+            }\n+            ShapeType::Map => {\n+                self.visit_shapes(shape.key_type(), visitor);\n+                self.visit_shapes(shape.value_type(), visitor);\n+            }\n+            ShapeType::List => {\n+                self.visit_shapes(shape.member_type(), visitor);\n+            }\n+            _ => {}\n+        }\n+    }\n }\n', 'addition_count': 31, 'deletion_count': 0, 'src_file': 'a/service_crategen/src/service.rs', 'tgt_file': 'b/service_crategen/src/service.rs', 'file_extension': '.rs', 'before_file': 'use std::collections::BTreeMap;\n\nuse crate::botocore::{Member, Operation, ServiceDefinition, Shape, ShapeType, Value};\nuse crate::cargo;\nuse crate::config::ServiceConfig;\n\n#[derive(Debug)]\npub struct Service<\'a> {\n    config: &\'a crate::ServiceConfig,\n    definition: ServiceDefinition,\n}\n\nimpl<\'b> Service<\'b> {\n    pub fn new(config: &\'b ServiceConfig, definition: ServiceDefinition) -> Self {\n        Service { config, definition }\n    }\n\n    pub fn name(&self) -> &str {\n        match self.definition.metadata.service_abbreviation {\n            Some(ref service_abbreviation) => service_abbreviation.as_str(),\n            None => self.definition.metadata.service_full_name.as_ref(),\n        }\n    }\n\n    pub fn full_name(&self) -> &str {\n        &self.definition.metadata.service_full_name\n    }\n\n    pub fn service_id(&self) -> Option<&str> {\n        self.definition\n            .metadata\n            .service_id\n            .as_ref()\n            .map(std::string::String::as_str)\n    }\n\n    pub fn documentation(&self) -> Option<&String> {\n        self.definition.documentation.as_ref()\n    }\n\n    pub fn protocol(&self) -> &str {\n        &self.definition.metadata.protocol\n    }\n\n    pub fn client_type_name(&self) -> String {\n        format!("{}Client", self.service_type_name())\n    }\n\n    pub fn service_type_name(&self) -> &str {\n        &self.config.base_type_name\n    }\n\n    pub fn endpoint_prefix(&self) -> &str {\n        &self.definition.metadata.endpoint_prefix\n    }\n\n    pub fn api_version(&self) -> &str {\n        &self.definition.metadata.api_version\n    }\n\n    pub fn target_prefix(&self) -> Option<&String> {\n        self.definition.metadata.target_prefix.as_ref()\n    }\n\n    pub fn json_version(&self) -> Option<&String> {\n        self.definition.metadata.json_version.as_ref()\n    }\n\n    pub fn shapes(&self) -> &BTreeMap<String, Shape> {\n        &self.definition.shapes\n    }\n\n    pub fn get_shape(&self, name: &str) -> Option<&Shape> {\n        self.definition.shapes.get(name)\n    }\n\n    pub fn operations(&self) -> &BTreeMap<String, Operation> {\n        &self.definition.operations\n    }\n\n    pub fn shape_for_value<\'a>(&\'a self, value: &Value) -> Option<&\'a Shape> {\n        self.definition.shapes.get(&value.shape)\n    }\n\n    pub fn shape_for_member<\'a>(&\'a self, member: &Member) -> Option<&\'a Shape> {\n        self.definition.shapes.get(&member.shape)\n    }\n\n    pub fn shape_type_for_member<\'a>(&\'a self, member: &Member) -> Option<ShapeType> {\n        self.definition\n            .shapes\n            .get(&member.shape)\n            .map(|shape| shape.shape_type)\n    }\n\n    pub fn signing_name(&self) -> String {\n        match self.definition.metadata.signing_name {\n            Some(ref signing_name) => signing_name.to_string(),\n            None => self.definition.metadata.endpoint_prefix.to_string(),\n        }\n    }\n\n    pub fn needs_serde_json_crate(&self) -> bool {\n        match self.name() {\n            "AmazonApiGatewayManagementApi"\n            | "Amazon CloudSearch Domain"\n            | "AWS Mobile"\n            | "AWS IoT Data Plane"\n            | "Amazon SageMaker Runtime"\n            | "SSO" => false,\n            _ => true,\n        }\n    }\n\n    pub fn has_event_streams(&self) -> bool {\n        self.shapes().values().into_iter().any(|s| s.eventstream())\n    }\n\n    pub fn get_dependencies(&self) -> BTreeMap<String, cargo::Dependency> {\n        let mut dependencies = BTreeMap::new();\n\n        dependencies.insert(\n            "async-trait".to_owned(),\n            cargo::Dependency::Simple("0.1".into()),\n        );\n        dependencies.insert("bytes".to_owned(), cargo::Dependency::Simple("1.0".into()));\n        dependencies.insert(\n            "futures".to_owned(),\n            cargo::Dependency::Extended {\n                path: None,\n                version: Some("0.3".to_owned()),\n                optional: None,\n                default_features: None,\n                features: None,\n            },\n        );\n        dependencies.insert(\n            "rusoto_core".to_owned(),\n            cargo::Dependency::Extended {\n                path: Some("../../core".into()),\n                version: Some(self.config.core_version.clone()),\n                optional: None,\n                default_features: Some(false),\n                features: None,\n            },\n        );\n\n        match self.protocol() {\n            "json" => {\n                dependencies.insert(\n                    "serde".to_owned(),\n                    cargo::Dependency::Extended {\n                        version: Some("1.0".into()),\n                        path: None,\n                        optional: None,\n                        default_features: None,\n                        features: Some(vec!["derive".into()]),\n                    },\n                );\n                dependencies.insert(\n                    "serde_json".to_owned(),\n                    cargo::Dependency::Simple("1.0".into()),\n                );\n            }\n            "query" | "ec2" => {\n                dependencies.insert(\n                    "serde".to_owned(),\n                    cargo::Dependency::Extended {\n                        version: Some("1.0.2".into()),\n                        optional: Some(true),\n                        path: None,\n                        default_features: None,\n                        features: None,\n                    },\n                );\n                dependencies.insert(\n                    "serde_derive".to_owned(),\n                    cargo::Dependency::Extended {\n                        version: Some("1.0.2".into()),\n                        optional: Some(true),\n                        path: None,\n                        default_features: None,\n                        features: None,\n                    },\n                );\n                dependencies.insert(\n                    "serde_urlencoded".to_owned(),\n                    cargo::Dependency::Simple("0.7".into()),\n                );\n                dependencies.insert("xml-rs".to_owned(), cargo::Dependency::Simple("0.8".into()));\n            }\n            "rest-xml" => {\n                dependencies.insert(\n                    "serde".to_owned(),\n                    cargo::Dependency::Extended {\n                        version: Some("1.0.2".into()),\n                        optional: Some(true),\n                        path: None,\n                        default_features: None,\n                        features: None,\n                    },\n                );\n                dependencies.insert(\n                    "serde_derive".to_owned(),\n\n        dev_dependencies\n    }\n}\n    }\n\n    pub fn get_dev_dependencies(&self) -> BTreeMap<String, cargo::Dependency> {\n        let mut dev_dependencies = BTreeMap::new();\n\n        dev_dependencies.insert(\n            "rusoto_mock".to_owned(),\n            cargo::Dependency::Extended {\n                path: Some("../../../mock".into()),\n                version: Some(self.config.core_version.clone()),\n                optional: None,\n                default_features: Some(false),\n                features: None,\n            },\n        );\n\n        dev_dependencies.insert(\n            "tokio".to_owned(),\n            cargo::Dependency::Simple("1.0".to_owned()),\n        );\n\n        if let Some(ref custom_dev_dependencies) = self.config.custom_dev_dependencies {\n            dev_dependencies.extend(custom_dev_dependencies.clone());\n        }\n\n        dev_dependencies\n    }\n\n    pub fn visit_shapes<F>(&self, shape_name: &str, visitor: &mut F)\n    where\n        F: FnMut(&str, &Shape) -> bool,\n    {\n        let shape = self\n            .get_shape(shape_name)\n            .expect("Shape missing from service definition");\n\n        if !visitor(shape_name, shape) {\n            return;\n        }\n\n        match shape.shape_type {\n            ShapeType::Structure => {\n                if let Some(ref members) = shape.members {\n                    for member in members.values() {\n                        self.visit_shapes(&member.shape, visitor);\n                    }\n                }\n            }\n            ShapeType::Map => {\n                self.visit_shapes(shape.key_type(), visitor);\n                self.visit_shapes(shape.value_type(), visitor);\n            }\n            ShapeType::List => {\n                self.visit_shapes(shape.member_type(), visitor);\n            }\n            _ => {}\n        }\n    }\n}\n', 'message': 'Merge pull request #1428 from rusoto/fix/skip-type-generation-for-unused-shapes\n\nskip type generation for unused shapes', 'author_name': 'GitHub', 'lang': 'rs'}