'$version'    Keyword.Declaration
':'           Name.Decorator
' "1.0"'      Name.Class
'\n\n'        Text.Whitespace

'namespace'   Keyword.Declaration
' test'       Name.Class
'\n\n'        Text.Whitespace

'/// Define how an HTTP request is serialized given a specific protocol,' Comment.Multiline
'\n'          Text.Whitespace

'/// authentication scheme, and set of input parameters.' Comment.Multiline
'\n'          Text.Whitespace

'@trait'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"operation"' Literal.String.Double
')'           Text
'\n'          Text.Whitespace

'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n'          Text.Whitespace

'list'        Keyword.Declaration
' httpRequestTests' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'member:'     Name.Label
' '           Text.Whitespace
'HttpRequestTestCase' Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpRequestTestCase' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'/// The identifier of the test case. This identifier can be used by' Comment.Multiline
'\n    '      Text.Whitespace
'/// protocol test implementations to filter out unsupported test' Comment.Multiline
'\n    '      Text.Whitespace
'/// cases by ID, to generate test case names, etc. The provided `id`' Comment.Multiline
'\n    '      Text.Whitespace
"/// MUST match Smithy's `identifier` ABNF. No two `httpRequestTests`" Comment.Multiline
'\n    '      Text.Whitespace
'/// test cases can share the same ID.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@pattern'    Name.Decorator
'('           Text
'"^[A-Za-z_][A-Za-z0-9_]+$"' Literal.String.Double
')'           Text
'\n    '      Text.Whitespace
'id:'         Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The name of the protocol to test.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"[trait|protocolDefinition]"' Literal.String.Double
','           Punctuation
' '           Text.Whitespace
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'protocol:'   Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The expected serialized HTTP request method.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n    '      Text.Whitespace
'method:'     Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The request-target of the HTTP request, not including' Comment.Multiline
'\n    '      Text.Whitespace
'/// the query string (for example, "/foo/bar").' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n    '      Text.Whitespace
'uri:'        Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The host / endpoint provided to the client, not including the path' Comment.Multiline
'\n    '      Text.Whitespace
'/// or scheme (for example, "example.com").' Comment.Multiline
'\n    '      Text.Whitespace
'host:'       Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The host / endpoint that the client should send to, not including' Comment.Multiline
'\n    '      Text.Whitespace
'/// the path or scheme (for example, "prefix.example.com").' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// This can differ from the host provided to the client if the `hostPrefix`' Comment.Multiline
'\n    '      Text.Whitespace
'/// member of the `endpoint` trait is set, for instance.' Comment.Multiline
'\n    '      Text.Whitespace
'resolvedHost:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
"/// The optional authentication scheme shape ID to assume. It's" Comment.Multiline
'\n    '      Text.Whitespace
'/// possible that specific authentication schemes might influence' Comment.Multiline
'\n    '      Text.Whitespace
'/// the serialization logic of an HTTP request.' Comment.Multiline
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"[trait|authDefinition]"' Literal.String.Double
','           Punctuation
' '           Text.Whitespace
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'authScheme:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of the expected serialized query string parameters.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Each element in the list is a query string key value pair' Comment.Multiline
'\n    '      Text.Whitespace
'/// that starts with the query string parameter name optionally' Comment.Multiline
'\n    '      Text.Whitespace
'/// followed by "=", optionally followed by the query string' Comment.Multiline
'\n    '      Text.Whitespace
'/// parameter value. For example, "foo=bar", "foo=", and "foo"' Comment.Multiline
'\n    '      Text.Whitespace
'/// are all valid values. The query string parameter name and' Comment.Multiline
'\n    '      Text.Whitespace
'/// the value MUST appear in the format in which it is expected' Comment.Multiline
'\n    '      Text.Whitespace
'/// to be sent over the wire; if a key or value needs to be' Comment.Multiline
'\n    '      Text.Whitespace
'/// percent-encoded, then it MUST appear percent-encoded in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// A serialized HTTP request is not in compliance with the protocol' Comment.Multiline
'\n    '      Text.Whitespace
'/// if any query string parameter defined in `queryParams` is not' Comment.Multiline
'\n    '      Text.Whitespace
'/// defined in the request or if the value of a query string parameter' Comment.Multiline
'\n    '      Text.Whitespace
'/// in the request differs from the expected value.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// `queryParams` applies no constraints on additional query parameters.' Comment.Multiline
'\n    '      Text.Whitespace
'queryParams:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of query string parameter names that must not appear in the' Comment.Multiline
'\n    '      Text.Whitespace
'/// serialized HTTP request.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Each value MUST appear in the format in which it is sent over the' Comment.Multiline
'\n    '      Text.Whitespace
'/// wire; if a key needs to be percent-encoded, then it MUST appear' Comment.Multiline
'\n    '      Text.Whitespace
'/// percent-encoded in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'forbidQueryParams:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of query string parameter names that MUST appear in the' Comment.Multiline
'\n    '      Text.Whitespace
'/// serialized request URI, but no assertion is made on the value.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Each value MUST appear in the format in which it is sent over the' Comment.Multiline
'\n    '      Text.Whitespace
'/// wire; if a key needs to be percent-encoded, then it MUST appear' Comment.Multiline
'\n    '      Text.Whitespace
'/// percent-encoded in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'requireQueryParams:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines a map of expected HTTP headers.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Headers that are not listed in this map are ignored unless they are' Comment.Multiline
'\n    '      Text.Whitespace
'/// explicitly forbidden through `forbidHeaders`.' Comment.Multiline
'\n    '      Text.Whitespace
'headers:'    Name.Label
' '           Text.Whitespace
'StringMap'   Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of header field names that must not appear in the serialized' Comment.Multiline
'\n    '      Text.Whitespace
'/// HTTP request.' Comment.Multiline
'\n    '      Text.Whitespace
'forbidHeaders:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of header field names that must appear in the serialized' Comment.Multiline
'\n    '      Text.Whitespace
'/// HTTP message, but no assertion is made on the value.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Headers listed in `headers` do not need to appear in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'requireHeaders:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The expected HTTP message body.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If no request body is defined, then no assertions are made about' Comment.Multiline
'\n    '      Text.Whitespace
'/// the body of the message.' Comment.Multiline
'\n    '      Text.Whitespace
'body:'       Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The media type of the `body`.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// This is used to help test runners to parse and validate the expected' Comment.Multiline
'\n    '      Text.Whitespace
'/// data against generated data.' Comment.Multiline
'\n    '      Text.Whitespace
'bodyMediaType:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines the input parameters used to generated the HTTP request.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// These parameters MUST be compatible with the input of the operation.' Comment.Multiline
'\n    '      Text.Whitespace
'params:'     Name.Label
' '           Text.Whitespace
'Document'    Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines vendor-specific parameters that are used to influence the' Comment.Multiline
'\n    '      Text.Whitespace
'/// request. For example, some vendors might utilize environment' Comment.Multiline
'\n    '      Text.Whitespace
'/// variables, configuration files on disk, or other means to influence' Comment.Multiline
'\n    '      Text.Whitespace
'/// the serialization formats used by clients or servers.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If a `vendorParamsShape` is set, these parameters MUST be compatible' Comment.Multiline
'\n    '      Text.Whitespace
"/// with that shape's definition." Comment.Multiline
'\n    '      Text.Whitespace
'vendorParams:' Name.Label
' '           Text.Whitespace
'Document'    Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A shape to be used to validate the `vendorParams` member contents.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If set, the parameters in `vendorParams` MUST be compatible with this' Comment.Multiline
'\n    '      Text.Whitespace
"/// shape's definition." Comment.Multiline
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'vendorParamsShape:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A description of the test and what is being asserted.' Comment.Multiline
'\n    '      Text.Whitespace
'documentation:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Applies a list of tags to the test.' Comment.Multiline
'\n    '      Text.Whitespace
'tags:'       Name.Label
' '           Text.Whitespace
'NonEmptyStringList' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Indicates that the test case is only to be implemented by "client" or' Comment.Multiline
'\n    '      Text.Whitespace
'/// "server" implementations. This property is useful for identifying and' Comment.Multiline
'\n    '      Text.Whitespace
'/// testing edge cases of clients and servers that are impossible or' Comment.Multiline
'\n    '      Text.Whitespace
'/// undesirable to test in *both* client and server implementations.' Comment.Multiline
'\n    '      Text.Whitespace
'appliesTo:'  Name.Label
' '           Text.Whitespace
'AppliesTo'   Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'map'         Keyword.Declaration
' StringMap'  Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'key:'        Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n    '      Text.Whitespace
'value:'      Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'list'        Keyword.Declaration
' StringList' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'member:'     Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'/// Define how an HTTP response is serialized given a specific protocol,' Comment.Multiline
'\n'          Text.Whitespace

'/// authentication scheme, and set of output or error parameters.' Comment.Multiline
'\n'          Text.Whitespace

'@trait'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'":test(operation, structure[trait|error])"' Literal.String.Double
')'           Text
'\n'          Text.Whitespace

'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n'          Text.Whitespace

'list'        Keyword.Declaration
' httpResponseTests' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'member:'     Name.Label
' '           Text.Whitespace
'HttpResponseTestCase' Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpResponseTestCase' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'/// The identifier of the test case. This identifier can be used by' Comment.Multiline
'\n    '      Text.Whitespace
'/// protocol test implementations to filter out unsupported test' Comment.Multiline
'\n    '      Text.Whitespace
'/// cases by ID, to generate test case names, etc. The provided `id`' Comment.Multiline
'\n    '      Text.Whitespace
"/// MUST match Smithy's `identifier` ABNF. No two `httpResponseTests`" Comment.Multiline
'\n    '      Text.Whitespace
'/// test cases can share the same ID.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@pattern'    Name.Decorator
'('           Text
'"^[A-Za-z_][A-Za-z0-9_]+$"' Literal.String.Double
')'           Text
'\n    '      Text.Whitespace
'id:'         Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The shape ID of the protocol to test.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"[trait|protocolDefinition]"' Literal.String.Double
','           Punctuation
' '           Text.Whitespace
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'protocol:'   Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines the HTTP response code.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@range'      Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'100'         Literal.Number
','           Punctuation
' '           Text.Whitespace
'max:'        Name.Label
' '           Text.Whitespace
'599'         Literal.Number
')'           Text
'\n    '      Text.Whitespace
'code:'       Name.Label
' '           Text.Whitespace
'Integer'     Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
"/// The optional authentication scheme shape ID to assume. It's possible" Comment.Multiline
'\n    '      Text.Whitespace
'/// that specific authentication schemes might influence the serialization' Comment.Multiline
'\n    '      Text.Whitespace
'/// logic of an HTTP response.' Comment.Multiline
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"[trait|authDefinition]"' Literal.String.Double
','           Punctuation
' '           Text.Whitespace
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'authScheme:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A map of expected HTTP headers. Each key represents a header field' Comment.Multiline
'\n    '      Text.Whitespace
'/// name and each value represents the expected header value. An HTTP' Comment.Multiline
'\n    '      Text.Whitespace
'/// response is not in compliance with the protocol if any listed header' Comment.Multiline
'\n    '      Text.Whitespace
'/// is missing from the serialized response or if the expected header' Comment.Multiline
'\n    '      Text.Whitespace
'/// value differs from the serialized response value.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// `headers` applies no constraints on additional headers.' Comment.Multiline
'\n    '      Text.Whitespace
'headers:'    Name.Label
' '           Text.Whitespace
'StringMap'   Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of header field names that must not appear.' Comment.Multiline
'\n    '      Text.Whitespace
'forbidHeaders:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of header field names that must appear in the serialized' Comment.Multiline
'\n    '      Text.Whitespace
'/// HTTP message, but no assertion is made on the value.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Headers listed in `headers` map do not need to appear in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'requireHeaders:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines the HTTP message body.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If no response body is defined, then no assertions are made about' Comment.Multiline
'\n    '      Text.Whitespace
'/// the body of the message.' Comment.Multiline
'\n    '      Text.Whitespace
'body:'       Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The media type of the `body`.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// This is used to help test runners to parse and validate the expected' Comment.Multiline
'\n    '      Text.Whitespace
'/// data against generated data. Binary media type formats require that' Comment.Multiline
'\n    '      Text.Whitespace
'/// the contents of `body` are base64 encoded.' Comment.Multiline
'\n    '      Text.Whitespace
'bodyMediaType:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines the output parameters deserialized from the HTTP response.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// These parameters MUST be compatible with the output of the operation.' Comment.Multiline
'\n    '      Text.Whitespace
'params:'     Name.Label
' '           Text.Whitespace
'Document'    Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines vendor-specific parameters that are used to influence the' Comment.Multiline
'\n    '      Text.Whitespace
'/// response. For example, some vendors might utilize environment' Comment.Multiline
'\n    '      Text.Whitespace
'/// variables, configuration files on disk, or other means to influence' Comment.Multiline
'\n    '      Text.Whitespace
'/// the serialization formats used by clients or servers.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If a `vendorParamsShape` is set, these parameters MUST be compatible' Comment.Multiline
'\n    '      Text.Whitespace
"/// with that shape's definition." Comment.Multiline
'\n    '      Text.Whitespace
'vendorParams:' Name.Label
' '           Text.Whitespace
'Document'    Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A shape to be used to validate the `vendorParams` member contents.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// If set, the parameters in `vendorParams` MUST be compatible with this' Comment.Multiline
'\n    '      Text.Whitespace
"/// shape's definition." Comment.Multiline
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'vendorParamsShape:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A description of the test and what is being asserted.' Comment.Multiline
'\n    '      Text.Whitespace
'documentation:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Applies a list of tags to the test.' Comment.Multiline
'\n    '      Text.Whitespace
'tags:'       Name.Label
' '           Text.Whitespace
'NonEmptyStringList' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Indicates that the test case is only to be implemented by "client" or' Comment.Multiline
'\n    '      Text.Whitespace
'/// "server" implementations. This property is useful for identifying and' Comment.Multiline
'\n    '      Text.Whitespace
'/// testing edge cases of clients and servers that are impossible or' Comment.Multiline
'\n    '      Text.Whitespace
'/// undesirable to test in *both* client and server implementations.' Comment.Multiline
'\n    '      Text.Whitespace
'appliesTo:'  Name.Label
' '           Text.Whitespace
'AppliesTo'   Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'list'        Keyword.Declaration
' NonEmptyStringList' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'member:'     Name.Label
' '           Text.Whitespace
'NonEmptyString' Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n'          Text.Whitespace

'string'      Keyword.Declaration
' NonEmptyString' Name.Class
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'@enum'       Name.Decorator
'('           Text
'['           Text
'\n    '      Text.Whitespace
'{'           Text
'\n        '  Text.Whitespace
'value:'      Name.Label
' '           Text.Whitespace
'"client"'    Literal.String.Double
','           Punctuation
'\n        '  Text.Whitespace
'name:'       Name.Label
' '           Text.Whitespace
'"CLIENT"'    Literal.String.Double
','           Punctuation
'\n        '  Text.Whitespace
'documentation:' Name.Label
' '           Text.Whitespace
'"The test only applies to client implementations."' Literal.String.Double
'\n    '      Text.Whitespace
'}'           Text
','           Punctuation
'\n    '      Text.Whitespace
'{'           Text
'\n        '  Text.Whitespace
'value:'      Name.Label
' '           Text.Whitespace
'"server"'    Literal.String.Double
','           Punctuation
'\n        '  Text.Whitespace
'name:'       Name.Label
' '           Text.Whitespace
'"SERVER"'    Literal.String.Double
','           Punctuation
'\n        '  Text.Whitespace
'documentation:' Name.Label
' '           Text.Whitespace
'"The test only applies to server implementations."' Literal.String.Double
'\n    '      Text.Whitespace
'}'           Text
','           Punctuation
'\n'          Text.Whitespace

']'           Text
')'           Text
'\n'          Text.Whitespace

'string'      Keyword.Declaration
' AppliesTo'  Name.Class
'\n\n'        Text.Whitespace

'/// Define how a malformed HTTP request is rejected by a server given a specific protocol' Comment.Multiline
'\n'          Text.Whitespace

'@trait'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"operation"' Literal.String.Double
')'           Text
'\n'          Text.Whitespace

'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n'          Text.Whitespace

'@unstable'   Name.Decorator
'\n'          Text.Whitespace

'list'        Keyword.Declaration
' httpMalformedRequestTests' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'member:'     Name.Label
' '           Text.Whitespace
'HttpMalformedRequestTestCase' Name.Variable.Class
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpMalformedRequestTestCase' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'/// The identifier of the test case. This identifier can be used by' Comment.Multiline
'\n    '      Text.Whitespace
'/// protocol test implementations to filter out unsupported test' Comment.Multiline
'\n    '      Text.Whitespace
'/// cases by ID, to generate test case names, etc. The provided `id`' Comment.Multiline
'\n    '      Text.Whitespace
"/// MUST match Smithy's `identifier` ABNF. No two `httpMalformedRequestTests`" Comment.Multiline
'\n    '      Text.Whitespace
'/// test cases can share the same ID.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@pattern'    Name.Decorator
'('           Text
'"^[A-Za-z_][A-Za-z0-9_]+$"' Literal.String.Double
')'           Text
'\n    '      Text.Whitespace
'id:'         Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The name of the protocol to test.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@idRef'      Name.Decorator
'('           Text
'selector:'   Name.Label
' '           Text.Whitespace
'"[trait|protocolDefinition]"' Literal.String.Double
','           Punctuation
' '           Text.Whitespace
'failWhenMissing:' Name.Label
' '           Text.Whitespace
'true'        Keyword.Constant
')'           Text
'\n    '      Text.Whitespace
'protocol:'   Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The malformed request to send.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'request:'    Name.Label
' '           Text.Whitespace
'HttpMalformedRequestDefinition' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The expected response.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'response:'   Name.Label
' '           Text.Whitespace
'HttpMalformedResponseDefinition' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A description of the test and what is being asserted.' Comment.Multiline
'\n    '      Text.Whitespace
'documentation:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Applies a list of tags to the test.' Comment.Multiline
'\n    '      Text.Whitespace
'tags:'       Name.Label
' '           Text.Whitespace
'NonEmptyStringList' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// An optional set of test parameters for parameterized testing.' Comment.Multiline
'\n    '      Text.Whitespace
'testParameters:' Name.Label
' '           Text.Whitespace
'HttpMalformedRequestTestParametersDefinition' Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpMalformedRequestDefinition' Name.Class
' '           Text.Whitespace
'{'           Text
'\n\n    '    Text.Whitespace
'/// The expected serialized HTTP request method.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n    '      Text.Whitespace
'method:'     Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The request-target of the HTTP request, not including' Comment.Multiline
'\n    '      Text.Whitespace
'/// the query string (for example, "/foo/bar").' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@length'     Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'1'           Literal.Number
')'           Text
'\n    '      Text.Whitespace
'uri:'        Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The host / endpoint provided to the client, not including the path' Comment.Multiline
'\n    '      Text.Whitespace
'/// or scheme (for example, "example.com").' Comment.Multiline
'\n    '      Text.Whitespace
'host:'       Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A list of the serialized query string parameters to include in the request.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Each element in the list is a query string key value pair' Comment.Multiline
'\n    '      Text.Whitespace
'/// that starts with the query string parameter name optionally' Comment.Multiline
'\n    '      Text.Whitespace
'/// followed by "=", optionally followed by the query string' Comment.Multiline
'\n    '      Text.Whitespace
'/// parameter value. For example, "foo=bar", "foo=", and "foo"' Comment.Multiline
'\n    '      Text.Whitespace
'/// are all valid values. The query string parameter name and' Comment.Multiline
'\n    '      Text.Whitespace
'/// the value MUST appear in the format in which it is expected' Comment.Multiline
'\n    '      Text.Whitespace
'/// to be sent over the wire; if a key or value needs to be' Comment.Multiline
'\n    '      Text.Whitespace
'/// percent-encoded, then it MUST appear percent-encoded in this list.' Comment.Multiline
'\n    '      Text.Whitespace
'queryParams:' Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines a map HTTP headers to include in the request' Comment.Multiline
'\n    '      Text.Whitespace
'headers:'    Name.Label
' '           Text.Whitespace
'StringMap'   Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The HTTP message body to include in the request' Comment.Multiline
'\n    '      Text.Whitespace
'body:'       Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpMalformedResponseDefinition' Name.Class
' '           Text.Whitespace
'{'           Text
'\n\n    '    Text.Whitespace
'/// Defines a map of expected HTTP headers.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// Headers that are not listed in this map are ignored.' Comment.Multiline
'\n    '      Text.Whitespace
'headers:'    Name.Label
' '           Text.Whitespace
'StringMap'   Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// Defines the HTTP response code.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'@range'      Name.Decorator
'('           Text
'min:'        Name.Label
' '           Text.Whitespace
'100'         Literal.Number
','           Punctuation
' '           Text.Whitespace
'max:'        Name.Label
' '           Text.Whitespace
'599'         Literal.Number
')'           Text
'\n    '      Text.Whitespace
'code:'       Name.Label
' '           Text.Whitespace
'Integer'     Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The expected response body.' Comment.Multiline
'\n    '      Text.Whitespace
'body:'       Name.Label
' '           Text.Whitespace
'HttpMalformedResponseBodyDefinition' Name.Variable.Class
','           Punctuation
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'structure'   Keyword.Declaration
' HttpMalformedResponseBodyDefinition' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'/// The assertion to execute against the response body.' Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'assertion:'  Name.Label
' '           Text.Whitespace
'HttpMalformedResponseBodyAssertion' Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// The media type of the response body.' Comment.Multiline
'\n    '      Text.Whitespace
'///'         Comment.Multiline
'\n    '      Text.Whitespace
'/// This is used to help test runners to parse and evaluate' Comment.Multiline
'\n    '      Text.Whitespace
"/// `contents' and `messageRegex` in the assertion" Comment.Multiline
'\n    '      Text.Whitespace
'@required'   Name.Decorator
'\n    '      Text.Whitespace
'mediaType:'  Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'union'       Keyword.Declaration
' HttpMalformedResponseBodyAssertion' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'/// Defines the expected serialized response body, which will be matched' Comment.Multiline
'\n    '      Text.Whitespace
'/// exactly.' Comment.Multiline
'\n    '      Text.Whitespace
'contents:'   Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n\n    '    Text.Whitespace
'/// A regex to evaluate against the `message` field in the body. For' Comment.Multiline
'\n    '      Text.Whitespace
'/// responses that may have some variance from platform to platform,' Comment.Multiline
'\n    '      Text.Whitespace
'/// such as those that include messages from a parser.' Comment.Multiline
'\n    '      Text.Whitespace
'messageRegex:' Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
'\n'          Text.Whitespace

'}'           Text
'\n\n'        Text.Whitespace

'@private'    Name.Decorator
'\n'          Text.Whitespace

'map'         Keyword.Declaration
' HttpMalformedRequestTestParametersDefinition' Name.Class
' '           Text.Whitespace
'{'           Text
'\n    '      Text.Whitespace
'key:'        Name.Label
' '           Text.Whitespace
'String'      Name.Variable.Class
','           Punctuation
'\n    '      Text.Whitespace
'value:'      Name.Label
' '           Text.Whitespace
'StringList'  Name.Variable.Class
'\n'          Text.Whitespace

'}'           Text
'\n'          Text.Whitespace
