[
  {
    "description": "Scalar members",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "Foo": {
            "shape": "StringType"
          },
          "Bar": {
            "shape": "StringType"
          }
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "Foo": "val1",
          "Bar": "val2"
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&Bar=val2"
        }
      }
    ]
  },
  {
    "description": "Structure with locationName and queryName applied to members",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "Foo": {
            "shape": "StringType"
          },
          "Bar": {
            "shape": "StringType",
            "locationName": "barLocationName"
          },
          "Yuck": {
            "shape": "StringType",
            "locationName": "yuckLocationName",
            "queryName": "yuckQueryName"
          }
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "Foo": "val1",
          "Bar": "val2",
          "Yuck": "val3"
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&Foo=val1&BarLocationName=val2&yuckQueryName=val3"
        }
      }
    ]
  },
  {
    "description": "Nested structure members",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "StructArg": {
            "shape": "StructType",
            "locationName": "Struct"
          }
        }
      },
      "StructType": {
        "type": "structure",
        "members": {
          "ScalarArg": {
            "shape": "StringType",
            "locationName": "Scalar"
          }
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "StructArg": {
            "ScalarArg": "foo"
          }
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&Struct.Scalar=foo"
        }
      }
    ]
  },
  {
    "description": "List types",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "ListArg": {
            "shape": "ListType"
          }
        }
      },
      "ListType": {
        "type": "list",
        "member": {
          "shape": "Strings"
        }
      },
      "Strings": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "ListArg": [
            "foo",
            "bar",
            "baz"
          ]
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&ListArg.1=foo&ListArg.2=bar&ListArg.3=baz"
        }
      }
    ]
  },
  {
    "description": "List with location name applied to member",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "ListArg": {
            "shape": "ListType",
            "locationName": "ListMemberName"
          }
        }
      },
      "ListType": {
        "type": "list",
        "member": {
          "shape": "StringType",
          "LocationName": "item"
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "ListArg": [
            "a",
            "b",
            "c"
          ]
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&ListMemberName.1=a&ListMemberName.2=b&ListMemberName.3=c"
        }
      }
    ]
  },
  {
    "description": "List with locationName and queryName",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "ListArg": {
            "shape": "ListType",
            "locationName": "ListMemberName",
            "queryName": "ListQueryName"
          }
        }
      },
      "ListType": {
        "type": "list",
        "member": {
          "shape": "StringType",
          "LocationName": "item"
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "ListArg": [
            "a",
            "b",
            "c"
          ]
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&ListQueryName.1=a&ListQueryName.2=b&ListQueryName.3=c"
        }
      }
    ]
  },
  {
    "description": "Base64 encoded Blobs",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "BlobArg": {
            "shape": "BlobType"
          }
        }
      },
      "BlobType": {
        "type": "blob"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "BlobArg": "foo"
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&BlobArg=Zm9v"
        }
      }
    ]
  },
  {
    "description": "Timestamp values",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "TimeArg": {
            "shape": "TimestampType"
          }
        }
      },
      "TimestampType": {
        "type": "timestamp"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "name": "OperationName"
        },
        "params": {
          "TimeArg": 1422172800
        },
        "serialized": {
          "uri": "/",
          "body": "Action=OperationName&Version=2014-01-01&TimeArg=2015-01-25T08%3A00%3A00Z"
        }
      }
    ]
  },
  {
    "description": "Idempotency token auto fill",
    "metadata": {
      "protocol": "ec2",
      "apiVersion": "2014-01-01"
    },
    "shapes": {
      "InputShape": {
        "type": "structure",
        "members": {
          "Token": {
            "shape": "StringType",
			"idempotencyToken": true
          }
        }
      },
      "StringType": {
        "type": "string"
      }
    },
    "cases": [
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "http": {
            "method": "POST",
            "requestUri": "/path"
          },
          "name": "OperationName"
        },
        "params": {
          "Token": "abc123"
        },
        "serialized": {
          "uri": "/path",
          "headers": {},
          "body": "Token=abc123"
        }
      },
      {
        "given": {
          "input": {
            "shape": "InputShape"
          },
          "http": {
            "method": "POST",
            "requestUri": "/path"
          },
          "name": "OperationName"
        },
        "params": {
        },
        "serialized": {
          "uri": "/path",
          "headers": {},
          "body": "Token=00000000-0000-4000-8000-000000000000"
        }
      }
    ]
  }
]
