         case remove
     }
 
-    init(_ operation: Operation, entry: [JSONSubscriptType], value: String, originalValue: String? = nil) {
+    init(_ operation: Operation, entry: [JSONSubscriptType], key: String? = nil, value: String, originalValue: String? = nil) {
         self.operation = operation
         self.entry = entry
+        self.key = key
         self.value = value
         self.originalValue = originalValue
     }
 
     let operation : Operation
     let entry : [JSONSubscriptType]
+    let key : String?
     let value : CustomStringConvertible
     let originalValue : CustomStringConvertible?
 }

    "S3": [
        Patch(.replace, entry:["shapes","ReplicationStatus","enum",0], value:"COMPLETED", originalValue:"COMPLETE"),
        Patch(.replace, entry:["shapes","Size","type"], value:"long", originalValue:"integer"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"us-east-2"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"eu-west-2"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"eu-west-3"),

        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"ap-northeast-3"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"ca-central-1"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"cn-northwest-1"),
        Patch(.add, entry:["shapes", "BucketLocationConstraint", "enum"], value:"me-south-1"),
        // Add validation check for bucket name. To ensure we aren't creating buckets containing '.' in their name
        Patch(.add, entry:["shapes", "BucketName"], key:"pattern", value:"^[a-z0-9][a-z0-9-]+[a-z0-9]$")
    ]
]

