package s3 import "encoding/xml" // CreateBucketResponse represents the S3 CreateBucket response type CreateBucketResponse struct { XMLName xml.Name `xml:"CreateBucketResponse"` Location string `xml:"Location"` } // ListAllMyBucketsResult for listing buckets type ListAllMyBucketsResult struct { XMLName xml.Name `xml:"ListAllMyBucketsResult"` Owner Owner `xml:"Owner"` Buckets []Bucket `xml:"Buckets>Bucket"` } type Owner struct { ID string `xml:"ID"` DisplayName string `xml:"DisplayName"` } type Bucket struct { Name string `xml:"Name"` CreationDate string `xml:"CreationDate"` } // S3Error represents an S3 error response type S3Error struct { XMLName xml.Name `xml:"Error"` Code string `xml:"Code"` Message string `xml:"Message"` Resource string `xml:"Resource,omitempty"` RequestId string `xml:"RequestId"` } // DeleteObjectResponse represents the S3 DeleteObject response type DeleteObjectResponse struct { XMLName xml.Name `xml:"DeleteObjectResponse"` DeleteMarker bool `xml:"DeleteMarker,omitempty"` VersionId string `xml:"VersionId,omitempty"` } // DeleteObjectsRequest represents the S3 DeleteObjects request type DeleteObjectsRequest struct { XMLName xml.Name `xml:"Delete"` Objects []ObjectToDelete `xml:"Object"` Quiet bool `xml:"Quiet,omitempty"` } // ObjectToDelete represents an object to delete in a batch delete operation type ObjectToDelete struct { Key string `xml:"Key"` VersionId string `xml:"VersionId,omitempty"` } // DeleteObjectsResponse represents the S3 DeleteObjects response type DeleteObjectsResponse struct { XMLName xml.Name `xml:"DeleteResult"` Deleted []DeletedObject `xml:"Deleted,omitempty"` Errors []DeleteError `xml:"Error,omitempty"` } // DeletedObject represents a successfully deleted object type DeletedObject struct { Key string `xml:"Key"` VersionId string `xml:"VersionId,omitempty"` DeleteMarker bool `xml:"DeleteMarker,omitempty"` DeleteMarkerVersionId string `xml:"DeleteMarkerVersionId,omitempty"` } // DeleteError represents an error during batch delete type DeleteError struct { Key string `xml:"Key"` VersionId string `xml:"VersionId,omitempty"` Code string `xml:"Code"` Message string `xml:"Message"` } // Multipart Upload structures // InitiateMultipartUploadResult represents the response for CreateMultipartUpload type InitiateMultipartUploadResult struct { XMLName xml.Name `xml:"InitiateMultipartUploadResult"` Bucket string `xml:"Bucket"` Key string `xml:"Key"` UploadId string `xml:"UploadId"` } // CompleteMultipartUploadRequest represents the request to complete a multipart upload type CompleteMultipartUploadRequest struct { XMLName xml.Name `xml:"CompleteMultipartUpload"` Parts []CompletePart `xml:"Part"` } // CompletePart represents a part in the complete request type CompletePart struct { PartNumber int `xml:"PartNumber"` ETag string `xml:"ETag"` } // CompleteMultipartUploadResult represents the response for CompleteMultipartUpload type CompleteMultipartUploadResult struct { XMLName xml.Name `xml:"CompleteMultipartUploadResult"` Location string `xml:"Location"` Bucket string `xml:"Bucket"` Key string `xml:"Key"` ETag string `xml:"ETag"` } // AbortMultipartUploadOutput represents the response for AbortMultipartUpload type AbortMultipartUploadOutput struct { XMLName xml.Name `xml:"AbortMultipartUploadOutput"` } // ListPartsResult represents the response for ListParts type ListPartsResult struct { XMLName xml.Name `xml:"ListPartsResult"` Bucket string `xml:"Bucket"` Key string `xml:"Key"` UploadId string `xml:"UploadId"` Initiator Initiator `xml:"Initiator"` Owner Owner `xml:"Owner"` StorageClass string `xml:"StorageClass"` PartNumberMarker int `xml:"PartNumberMarker"` NextPartNumberMarker int `xml:"NextPartNumberMarker"` MaxParts int `xml:"MaxParts"` IsTruncated bool `xml:"IsTruncated"` Parts []Part `xml:"Part"` } // Initiator represents the initiator of a multipart upload type Initiator struct { ID string `xml:"ID"` DisplayName string `xml:"DisplayName"` } // Part represents an uploaded part type Part struct { PartNumber int `xml:"PartNumber"` LastModified string `xml:"LastModified"` ETag string `xml:"ETag"` Size int64 `xml:"Size"` } // ListMultipartUploadsResult represents the response for ListMultipartUploads type ListMultipartUploadsResult struct { XMLName xml.Name `xml:"ListMultipartUploadsResult"` Bucket string `xml:"Bucket"` KeyMarker string `xml:"KeyMarker,omitempty"` UploadIdMarker string `xml:"UploadIdMarker,omitempty"` NextKeyMarker string `xml:"NextKeyMarker,omitempty"` NextUploadIdMarker string `xml:"NextUploadIdMarker,omitempty"` MaxUploads int `xml:"MaxUploads"` IsTruncated bool `xml:"IsTruncated"` Uploads []MultipartUpload `xml:"Upload,omitempty"` Prefix string `xml:"Prefix,omitempty"` Delimiter string `xml:"Delimiter,omitempty"` } // MultipartUpload represents an in-progress multipart upload type MultipartUpload struct { Key string `xml:"Key"` UploadId string `xml:"UploadId"` Initiator Initiator `xml:"Initiator"` Owner Owner `xml:"Owner"` StorageClass string `xml:"StorageClass"` Initiated string `xml:"Initiated"` } // UploadPartOutput represents the response for UploadPart type UploadPartOutput struct { ETag string `xml:"-"` // Returned in header }