feat: add s3 xsd new schemas, create new routes

add: DeleteObjects new xsd schema
add: HeadObject, DeleteObjects api actions
This commit is contained in:
jonaustin09
2023-05-12 23:17:36 +04:00
parent 8c6e016109
commit 6a3254c29f
7 changed files with 787 additions and 97 deletions
+4 -4
View File
@@ -23,7 +23,7 @@ type Backend interface {
CreateMultipartUpload(*s3.CreateMultipartUploadInput) (*s3response.InitiateMultipartUploadResponse, s3err.ErrorCode)
CompleteMultipartUpload(bucket, object, uploadID string, parts []s3response.Part) (*s3response.CompleteMultipartUploadResponse, s3err.ErrorCode)
AbortMultipartUpload(*s3.AbortMultipartUploadInput) s3err.ErrorCode
ListMultipartUploads(*s3.ListMultipartUploadsInput) (*s3response.ListMultipartUploadsResponse, s3err.ErrorCode)
ListMultipartUploads(*s3response.ListMultipartUploads) (*s3response.ListMultipartUploadsResponse, s3err.ErrorCode)
ListObjectParts(bucket, object, uploadID string, partNumberMarker int, maxParts int) (*s3response.ListPartsResponse, s3err.ErrorCode)
CopyPart(srcBucket, srcObject, DstBucket, uploadID, rangeHeader string, part int) (*s3response.CopyObjectPartResponse, s3err.ErrorCode)
PutObjectPart(bucket, object, uploadID string, part int, r io.Reader) (etag string, err s3err.ErrorCode)
@@ -37,7 +37,7 @@ type Backend interface {
ListObjects(bucket, prefix, marker, delim string, maxkeys int) (*s3response.ListBucketResult, s3err.ErrorCode)
ListObjectsV2(bucket, prefix, marker, delim string, maxkeys int) (*s3response.ListBucketResultV2, s3err.ErrorCode)
DeleteObject(bucket, object string) s3err.ErrorCode
DeleteObjects(bucket string, objects []string) s3err.ErrorCode
DeleteObjects(bucket string, objects *s3response.DeleteObjectsInput) s3err.ErrorCode
IsTaggingSupported() bool
GetTags(bucket, object string) (map[string]string, error)
@@ -85,7 +85,7 @@ func (BackendUnsupported) CompleteMultipartUpload(bucket, object, uploadID strin
func (BackendUnsupported) AbortMultipartUpload(*s3.AbortMultipartUploadInput) s3err.ErrorCode {
return s3err.ErrNotImplemented
}
func (BackendUnsupported) ListMultipartUploads(*s3.ListMultipartUploadsInput) (*s3response.ListMultipartUploadsResponse, s3err.ErrorCode) {
func (BackendUnsupported) ListMultipartUploads(*s3response.ListMultipartUploads) (*s3response.ListMultipartUploadsResponse, s3err.ErrorCode) {
return nil, s3err.ErrNotImplemented
}
func (BackendUnsupported) ListObjectParts(bucket, object, uploadID string, partNumberMarker int, maxParts int) (*s3response.ListPartsResponse, s3err.ErrorCode) {
@@ -104,7 +104,7 @@ func (BackendUnsupported) PutObject(buket, object string, r io.Reader) (string,
func (BackendUnsupported) DeleteObject(bucket, object string) s3err.ErrorCode {
return s3err.ErrNotImplemented
}
func (BackendUnsupported) DeleteObjects(bucket string, object []string) s3err.ErrorCode {
func (BackendUnsupported) DeleteObjects(bucket string, objects *s3response.DeleteObjectsInput) s3err.ErrorCode {
return s3err.ErrNotImplemented
}
func (BackendUnsupported) GetObject(bucket, object string, startOffset, length int64, writer io.Writer, etag string) (*s3response.GetObjectResponse, s3err.ErrorCode) {
+34 -16
View File
@@ -3,7 +3,6 @@ package s3api
import (
"encoding/xml"
"errors"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/versity/scoutgw/backend"
"github.com/versity/scoutgw/internal"
@@ -22,7 +21,7 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend) {
// ListBuckets action
app.Get("/", func(ctx *fiber.Ctx) error {
res, code := be.ListBuckets()
return responce[internal.Any](ctx, res, code)
return responce[*s3response.ListAllMyBucketsList](ctx, res, code)
})
// PutBucket action
@@ -42,6 +41,7 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend) {
return responce[*s3response.HeadBucketResponse](ctx, res, code)
})
// GetBucketAcl action
// ListMultipartUploads action
// ListObjects action
// ListObjectsV2 action
app.Get("/:bucket", func(ctx *fiber.Ctx) error {
@@ -50,6 +50,11 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend) {
return responce[*s3response.GetBucketAclResponse](ctx, res, code)
}
if ctx.Request().URI().QueryArgs().Has("uploads") {
res, code := be.ListMultipartUploads(&s3response.ListMultipartUploads{Bucket: ctx.Params("bucket")})
return responce[*s3response.ListMultipartUploadsResponse](ctx, res, code)
}
if ctx.QueryInt("list-type") == 2 {
res, code := be.ListObjectsV2(ctx.Params("bucket"), "", "", "", 1)
return responce[*s3response.ListBucketResultV2](ctx, res, code)
@@ -58,25 +63,35 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend) {
res, code := be.ListObjects(ctx.Params("bucket"), "", "", "", 1)
return responce[*s3response.ListBucketResult](ctx, res, code)
})
// HeadObject action
app.Head("/:bucket/:key/*", func(ctx *fiber.Ctx) error {
bucket, key, keyEnd := ctx.Params("bucket"), ctx.Params("key"), ctx.Params("*1")
if keyEnd != "" {
key = strings.Join([]string{key, keyEnd}, "/")
}
res, code := be.HeadObject(bucket, key, "")
return responce[*s3response.HeadObjectResponse](ctx, res, code)
})
// GetObjectAcl action
// GetObject action
//todo: will continue HeadObject implementation
app.Get("/:bucket/:key/*", func(ctx *fiber.Ctx) error {
bucket, key, keyEnd := ctx.Params("bucket"), ctx.Params("key"), ctx.Params("*1")
if keyEnd != "" {
key = strings.Join([]string{key, keyEnd}, "/")
}
if ctx.Request().URI().QueryArgs().Has("acl") {
res, code := be.GetObjectAcl(ctx.Params("bucket"), ctx.Params("key"))
res, code := be.GetObjectAcl(bucket, key)
return responce[*s3response.GetObjectAccessControlPolicyResponse](ctx, res, code)
}
if attrs := ctx.Get("X-Amz-Object-Attributes"); attrs != "" {
res, code := be.GetObjectAttributes(ctx.Params("bucket"), ctx.Params("key"), strings.Split(ctx.Get("key"), ","))
res, code := be.GetObjectAttributes(bucket, key, strings.Split(attrs, ","))
return responce[*s3response.GetObjectAttributesResponse](ctx, res, code)
}
bucket, key, keyEnd := ctx.Params("bucket"), ctx.Params("key"), ctx.Params("*1")
if keyEnd != "" {
key = strings.Join([]string{key, keyEnd}, "/")
}
bRangeSl := strings.Split(ctx.Get("Range"), "=")
if len(bRangeSl) < 2 {
return errors.New("wrong api call")
@@ -112,24 +127,27 @@ func (sa *S3ApiRouter) Init(app *fiber.App, be backend.Backend) {
})
// DeleteObjects action
app.Post("/:bucket", func(ctx *fiber.Ctx) error {
body := ctx.Body()
var dObj s3response.DeleteObjectEntry
if err := xml.Unmarshal(ctx.Body(), &dObj); err != nil {
return errors.New("wrong api call")
}
fmt.Println(string(body))
//todo: create type for body and pass to function parsed structure
code := be.DeleteObjects(ctx.Params("bucket"), []string{})
code := be.DeleteObjects(ctx.Params("bucket"), &s3response.DeleteObjectsInput{Delete: dObj})
return responce[internal.Any](ctx, nil, code)
})
// CopyObject action
app.Put("/:dstBucket/:dstKey/*", func(ctx *fiber.Ctx) error {
app.Put("/:bucket/:key/*", func(ctx *fiber.Ctx) error {
copySource := strings.Split(ctx.Get("X-Amz-Copy-Source"), "/")
if len(copySource) < 2 {
return errors.New("wrong api call")
}
srcBucket, srcObject := copySource[0], copySource[1:]
dstBucket, dstKeyStart, dstKeyEnd := ctx.Params("dstBucket"), ctx.Params("dstKey"), ctx.Params("*1")
dstBucket, dstKeyStart, dstKeyEnd := ctx.Params("bucket"), ctx.Params("key"), ctx.Params("*1")
if dstKeyEnd != "" {
dstKeyStart = strings.Join([]string{dstKeyStart, dstKeyEnd}, "/")
}
res, code := be.CopyObject(srcBucket, strings.Join(srcObject, "/"), dstBucket, dstKeyStart)
return responce[*s3response.CopyObjectResponse](ctx, res, code)
})
+13 -10
View File
@@ -1,9 +1,12 @@
package s3api
import (
"encoding/xml"
"fmt"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
"github.com/versity/scoutgw/backend"
"github.com/versity/scoutgw/s3response"
)
type S3ApiServer struct {
@@ -19,16 +22,16 @@ func New(app *fiber.App, be backend.Backend, port string) (s3ApiServer *S3ApiSer
app.Use(logger.New())
s3ApiServer.router.Init(app, be)
//app.All("/*", func(ctx *fiber.Ctx) error {
//
// fmt.Println(ctx.Method())
// listBucket := new(s3response.ListBucket)
// if b, err := xml.Marshal(listBucket); err != nil {
// return err
// } else {
// return ctx.Send(b)
// }
//})
app.All("/*", func(ctx *fiber.Ctx) error {
fmt.Println(ctx.Method())
listBucket := new(s3response.ListBucket)
if b, err := xml.Marshal(listBucket); err != nil {
return err
} else {
return ctx.Send(b)
}
})
return
}
+157 -19
View File
@@ -95,7 +95,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetBucketLoggingStatusResponse">
<xsd:complexType>
<xsd:sequence>
@@ -116,7 +115,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SetBucketLoggingStatusResponse">
<xsd:complexType>
<xsd:sequence/>
@@ -135,7 +133,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetObjectAccessControlPolicyResponse">
<xsd:complexType>
<xsd:sequence>
@@ -205,7 +202,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetBucketAccessControlPolicyResponse">
<xsd:complexType>
<xsd:sequence>
@@ -317,7 +313,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SetObjectAccessControlPolicyResponse">
<xsd:complexType>
<xsd:sequence/>
@@ -336,7 +331,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="SetBucketAccessControlPolicyResponse">
<xsd:complexType>
<xsd:sequence/>
@@ -405,7 +399,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetObjectAclResponse">
<xsd:complexType>
<xsd:sequence>
@@ -431,7 +424,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetObjectAttributesResponse">
<xsd:complexType>
<xsd:sequence>
@@ -481,7 +473,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="GetObjectExtendedResponse">
<xsd:complexType>
<xsd:sequence>
@@ -506,7 +497,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PutObjectResponse">
<xsd:complexType>
<xsd:sequence>
@@ -514,7 +504,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="PutObjectResult">
<xsd:sequence>
<xsd:element name="ETag" type="xsd:string"/>
@@ -539,7 +528,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="PutObjectInlineResponse">
<xsd:complexType>
<xsd:sequence>
@@ -560,7 +548,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DeleteObjectResponse">
<xsd:complexType>
<xsd:sequence>
@@ -569,6 +556,32 @@
</xsd:complexType>
</xsd:element>
<xsd:element name="DeleteObjects">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="AWSAccessKeyId" type="xsd:string" minOccurs="0"/>
<xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
<xsd:element name="Signature" type="xsd:string" minOccurs="0"/>
<xsd:element name="Credential" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DeleteObjectsInput">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Delete" type="tns:DeleteObjectEntry"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="DeleteObjectsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Deleted" type="tns:DeletedEntry"/>
<xsd:element name="Error" type="tns:Error"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListBucket">
<xsd:complexType>
<xsd:sequence>
@@ -584,7 +597,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListBucketResponse">
<xsd:complexType>
<xsd:sequence>
@@ -592,7 +604,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListVersionsResponse">
<xsd:complexType>
<xsd:sequence>
@@ -601,6 +612,127 @@
</xsd:complexType>
</xsd:element>
<xsd:element name="ListMultipartUploads">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Bucket" type="xsd:string"/>
<xsd:element name="Delimiter" type="xsd:string"/>
<xsd:element name="EncodingType" type="xsd:string"/>
<xsd:element name="KeyMarker" type="xsd:string"/>
<xsd:element name="MaxUploads" type="xsd:string"/>
<xsd:element name="Prefix" type="xsd:string"/>
<xsd:element name="UploadIdMarker" type="xsd:string"/>
<xsd:element name="AWSAccessKeyId" type="xsd:string" minOccurs="0"/>
<xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
<xsd:element name="Signature" type="xsd:string" minOccurs="0"/>
<xsd:element name="Credential" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListMultipartUploadsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Bucket" type="xsd:string"/>
<xsd:element name="KeyMarker" type="xsd:string"/>
<xsd:element name="UploadIdMarker" type="xsd:string"/>
<xsd:element name="NextKeyMarker" type="xsd:string"/>
<xsd:element name="Prefix" type="xsd:string"/>
<xsd:element name="Delimiter" type="xsd:string"/>
<xsd:element name="NextUploadIdMarker" type="xsd:string"/>
<xsd:element name="MaxUploads" type="xsd:integer"/>
<xsd:element name="IsTruncated" type="xsd:boolean"/>
<xsd:element name="Upload" type="tns:UploadEntry"/>
<xsd:element name="CommonPrefixes" type="tns:CommonPrefixes"/>
<xsd:element name="EncodingType" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreateMultipartUpload">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Bucket" type="xsd:string"/>
<xsd:element name="CacheControl" type="xsd:string"/>
<xsd:element name="ContentDisposition" type="xsd:string"/>
<xsd:element name="ContentEncoding" type="xsd:string"/>
<xsd:element name="ContentLanguage" type="xsd:string"/>
<xsd:element name="ContentType" type="xsd:string"/>
<xsd:element name="Expires" type="xsd:dateTime"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="AWSAccessKeyId" type="xsd:string" minOccurs="0"/>
<xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
<xsd:element name="Signature" type="xsd:string" minOccurs="0"/>
<xsd:element name="Credential" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CreateMultipartUploadResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Bucket" type="xsd:string"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="UploadId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="DeleteObjectEntry">
<xsd:sequence>
<xsd:element name="Object" type="tns:ObjectIdentifier"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="Quiet" type="xsd:boolean"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="DeletedEntry">
<xsd:sequence>
<xsd:element name="DeleteMarker" type="xsd:boolean"/>
<xsd:element name="DeleteMarkerVersionId" type="xsd:string"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="VersionId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="UploadEntry">
<xsd:sequence>
<xsd:element name="ChecksumAlgorithm" type="xsd:string"/>
<xsd:element name="Initiated" type="xsd:dateTime"/>
<xsd:element name="Initiator" type="tns:InitiatorEntry"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="Owner" type="tns:CanonicalUser"/>
<xsd:element name="StorageClass" type="xsd:string"/>
<xsd:element name="UploadId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ObjectIdentifier">
<xsd:sequence>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="VersionId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="InitiatorEntry">
<xsd:sequence>
<xsd:element name="DisplayName" type="xsd:string"/>
<xsd:element name="ID" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CommonPrefixes">
<xsd:sequence>
<xsd:element name="Prefix" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ListEntry">
<xsd:sequence>
<xsd:element name="Key" type="xsd:string"/>
@@ -655,7 +787,6 @@
<xsd:element name="CommonPrefixes" type="tns:PrefixEntry" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="ListVersionsResult">
<xsd:sequence>
<xsd:element name="Metadata" type="tns:MetadataEntry" minOccurs="0" maxOccurs="unbounded"/>
@@ -685,7 +816,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="ListAllMyBucketsResponse">
<xsd:complexType>
<xsd:sequence>
@@ -725,6 +855,15 @@
</xsd:complexType>
</xsd:element>
<xsd:complexType name="Error">
<xsd:sequence>
<xsd:element name="Code" type="xsd:string"/>
<xsd:element name="Key" type="xsd:string"/>
<xsd:element name="Message" type="xsd:string"/>
<xsd:element name="VersionId" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="MetadataDirective">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="COPY"/>
@@ -751,10 +890,10 @@
<xsd:element name="Timestamp" type="xsd:dateTime" minOccurs="0"/>
<xsd:element name="Signature" type="xsd:string" minOccurs="0"/>
<xsd:element name="Credential" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="CopyObjectResponse">
<xsd:complexType>
<xsd:sequence>
@@ -762,7 +901,6 @@
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="CopyObjectResult">
<xsd:sequence>
<xsd:element name="LastModified" type="xsd:dateTime"/>
+1 -1
View File
@@ -4,4 +4,4 @@ see https://blog.aqwari.net/xml-schema-go/
go install aqwari.net/xml/cmd/xsdgen@latest
xsdgen -o s3api_xsd_generated.go -pkg s3response AmazonS3.xsd
xsdgen -o s3api_xsd_generated.go -pkg s3response AmazonS3-additions.xsd
xsdgen -o s3api_xsd_generated.go -pkg s3response AmazonS3-additions.xsd
+577
View File
@@ -22,6 +22,385 @@ type AmazonCustomerByEmail struct {
EmailAddress string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ EmailAddress"`
}
type Anon1 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
Metadata []MetadataEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Metadata,omitempty"`
ContentLength int64 `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentLength"`
AccessControlList AccessControlList `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AccessControlList,omitempty"`
StorageClass StorageClass `xml:"http://s3.amazonaws.com/doc/2006-03-01/ StorageClass,omitempty"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon1) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon1
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon1) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon1
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon10 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix,omitempty"`
Marker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Marker,omitempty"`
MaxKeys int `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxKeys,omitempty"`
Delimiter string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delimiter,omitempty"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon10) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon10
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon10) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon10
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon11 struct {
ListBucketResponse ListBucketResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListBucketResponse"`
}
type Anon12 struct {
ListVersionsResponse ListVersionsResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListVersionsResponse"`
}
type Anon13 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Delimiter string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delimiter"`
EncodingType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ EncodingType"`
KeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ KeyMarker"`
MaxUploads string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxUploads"`
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix"`
UploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadIdMarker"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon13) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon13
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon13) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon13
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon14 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
KeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ KeyMarker"`
UploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadIdMarker"`
NextKeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ NextKeyMarker"`
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix"`
Delimiter string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delimiter"`
NextUploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ NextUploadIdMarker"`
MaxUploads int `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxUploads"`
IsTruncated bool `xml:"http://s3.amazonaws.com/doc/2006-03-01/ IsTruncated"`
Upload UploadEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Upload"`
CommonPrefixes CommonPrefixes `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CommonPrefixes"`
EncodingType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ EncodingType"`
}
type Anon15 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
CacheControl string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CacheControl"`
ContentDisposition string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentDisposition"`
ContentEncoding string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentEncoding"`
ContentLanguage string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentLanguage"`
ContentType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentType"`
Expires time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon15) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon15
var layout struct {
*T
Expires *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Expires = (*xsdDateTime)(&layout.T.Expires)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon15) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon15
var overlay struct {
*T
Expires *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Expires = (*xsdDateTime)(&overlay.T.Expires)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon16 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
UploadId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadId"`
}
type Anon17 struct {
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
}
func (t *Anon17) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon17
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon17) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon17
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon18 struct {
ListAllMyBucketsResponse ListAllMyBucketsResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListAllMyBucketsResponse"`
}
type Anon19 struct {
Location string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Location"`
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
ETag string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ETag"`
}
type Anon2 struct {
PutObjectResponse PutObjectResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ PutObjectResponse"`
}
type Anon20 struct {
SourceBucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ SourceBucket"`
SourceKey string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ SourceKey"`
DestinationBucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DestinationBucket"`
DestinationKey string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DestinationKey"`
MetadataDirective MetadataDirective `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MetadataDirective,omitempty"`
Metadata []MetadataEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Metadata,omitempty"`
AccessControlList AccessControlList `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AccessControlList,omitempty"`
CopySourceIfModifiedSince time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfModifiedSince,omitempty"`
CopySourceIfUnmodifiedSince time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfUnmodifiedSince,omitempty"`
CopySourceIfMatch []string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfMatch,omitempty"`
CopySourceIfNoneMatch []string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfNoneMatch,omitempty"`
StorageClass StorageClass `xml:"http://s3.amazonaws.com/doc/2006-03-01/ StorageClass,omitempty"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon20) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon20
var layout struct {
*T
CopySourceIfModifiedSince *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfModifiedSince,omitempty"`
CopySourceIfUnmodifiedSince *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfUnmodifiedSince,omitempty"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.CopySourceIfModifiedSince = (*xsdDateTime)(&layout.T.CopySourceIfModifiedSince)
layout.CopySourceIfUnmodifiedSince = (*xsdDateTime)(&layout.T.CopySourceIfUnmodifiedSince)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon20) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon20
var overlay struct {
*T
CopySourceIfModifiedSince *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfModifiedSince,omitempty"`
CopySourceIfUnmodifiedSince *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopySourceIfUnmodifiedSince,omitempty"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.CopySourceIfModifiedSince = (*xsdDateTime)(&overlay.T.CopySourceIfModifiedSince)
overlay.CopySourceIfUnmodifiedSince = (*xsdDateTime)(&overlay.T.CopySourceIfUnmodifiedSince)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon21 struct {
CopyObjectResult CopyObjectResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CopyObjectResult"`
}
type Anon3 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
Metadata []MetadataEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Metadata,omitempty"`
Data []byte `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Data"`
ContentLength int64 `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentLength"`
AccessControlList AccessControlList `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AccessControlList,omitempty"`
StorageClass StorageClass `xml:"http://s3.amazonaws.com/doc/2006-03-01/ StorageClass,omitempty"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon3) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon3
var layout struct {
*T
Data *xsdBase64Binary `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Data"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Data = (*xsdBase64Binary)(&layout.T.Data)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon3) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon3
var overlay struct {
*T
Data *xsdBase64Binary `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Data"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Data = (*xsdBase64Binary)(&overlay.T.Data)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon4 struct {
PutObjectInlineResponse PutObjectResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ PutObjectInlineResponse"`
}
type Anon5 struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon5) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon5
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon5) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon5
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon6 struct {
DeleteObjectResponse Status `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteObjectResponse"`
}
type Anon7 struct {
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *Anon7) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T Anon7
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *Anon7) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T Anon7
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type Anon8 struct {
Delete DeleteObjectEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delete"`
}
type Anon9 struct {
Deleted DeletedEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Deleted"`
Error Error `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Error"`
}
type BucketLoggingStatus struct {
LoggingEnabled LoggingSettings `xml:"http://s3.amazonaws.com/doc/2006-03-01/ LoggingEnabled,omitempty"`
}
@@ -38,6 +417,10 @@ type Checksum struct {
ChecksumSHA256 string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ChecksumSHA256"`
}
type CommonPrefixes struct {
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix"`
}
type CopyObject struct {
SourceBucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ SourceBucket"`
SourceKey string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ SourceKey"`
@@ -157,6 +540,52 @@ type CreateBucketResult struct {
BucketName string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ BucketName"`
}
type CreateMultipartUpload struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
CacheControl string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CacheControl"`
ContentDisposition string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentDisposition"`
ContentEncoding string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentEncoding"`
ContentLanguage string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentLanguage"`
ContentType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ContentType"`
Expires time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *CreateMultipartUpload) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T CreateMultipartUpload
var layout struct {
*T
Expires *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Expires = (*xsdDateTime)(&layout.T.Expires)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *CreateMultipartUpload) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T CreateMultipartUpload
var overlay struct {
*T
Expires *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Expires"`
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Expires = (*xsdDateTime)(&overlay.T.Expires)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type CreateMultipartUploadResponse struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
UploadId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadId"`
}
type DeleteBucket struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
@@ -249,10 +678,67 @@ func (t *DeleteObject) UnmarshalXML(d *xml.Decoder, start xml.StartElement) erro
return d.DecodeElement(&overlay, &start)
}
type DeleteObjectEntry struct {
Object ObjectIdentifier `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Object"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
Quiet bool `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Quiet"`
}
type DeleteObjectResponse struct {
DeleteObjectResponse Status `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteObjectResponse"`
}
type DeleteObjects struct {
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *DeleteObjects) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T DeleteObjects
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *DeleteObjects) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T DeleteObjects
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type DeleteObjectsInput struct {
Delete DeleteObjectEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delete"`
}
type DeleteObjectsResponse struct {
Deleted DeletedEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Deleted"`
Error Error `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Error"`
}
type DeletedEntry struct {
DeleteMarker bool `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteMarker"`
DeleteMarkerVersionId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteMarkerVersionId"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
VersionId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ VersionId"`
}
type Error struct {
Code string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Code"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
Message string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Message"`
VersionId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ VersionId"`
}
type GetBucketAccessControlPolicy struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
@@ -737,6 +1223,11 @@ func (t *HeadObjectResponse) UnmarshalXML(d *xml.Decoder, start xml.StartElement
return d.DecodeElement(&overlay, &start)
}
type InitiatorEntry struct {
DisplayName string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DisplayName"`
ID string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ID"`
}
type ListAllMyBuckets struct {
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
@@ -883,6 +1374,56 @@ func (t *ListEntry) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
return d.DecodeElement(&overlay, &start)
}
type ListMultipartUploads struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
Delimiter string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delimiter"`
EncodingType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ EncodingType"`
KeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ KeyMarker"`
MaxUploads string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxUploads"`
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix"`
UploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadIdMarker"`
AWSAccessKeyId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ AWSAccessKeyId,omitempty"`
Timestamp time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
Signature string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Signature,omitempty"`
Credential string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Credential,omitempty"`
}
func (t *ListMultipartUploads) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T ListMultipartUploads
var layout struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
layout.T = (*T)(t)
layout.Timestamp = (*xsdDateTime)(&layout.T.Timestamp)
return e.EncodeElement(layout, start)
}
func (t *ListMultipartUploads) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T ListMultipartUploads
var overlay struct {
*T
Timestamp *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Timestamp,omitempty"`
}
overlay.T = (*T)(t)
overlay.Timestamp = (*xsdDateTime)(&overlay.T.Timestamp)
return d.DecodeElement(&overlay, &start)
}
type ListMultipartUploadsResponse struct {
Bucket string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Bucket"`
KeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ KeyMarker"`
UploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadIdMarker"`
NextKeyMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ NextKeyMarker"`
Prefix string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Prefix"`
Delimiter string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Delimiter"`
NextUploadIdMarker string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ NextUploadIdMarker"`
MaxUploads int `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxUploads"`
IsTruncated bool `xml:"http://s3.amazonaws.com/doc/2006-03-01/ IsTruncated"`
Upload UploadEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Upload"`
CommonPrefixes CommonPrefixes `xml:"http://s3.amazonaws.com/doc/2006-03-01/ CommonPrefixes"`
EncodingType string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ EncodingType"`
}
type ListVersionsResponse struct {
ListVersionsResponse ListVersionsResult `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListVersionsResponse"`
}
@@ -924,6 +1465,11 @@ type NotificationConfiguration struct {
TopicConfiguration []TopicConfiguration `xml:"http://s3.amazonaws.com/doc/2006-03-01/ TopicConfiguration,omitempty"`
}
type ObjectIdentifier struct {
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
VersionId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ VersionId"`
}
type ObjectParts struct {
IsTruncated bool `xml:"http://s3.amazonaws.com/doc/2006-03-01/ IsTruncated"`
MaxParts int `xml:"http://s3.amazonaws.com/doc/2006-03-01/ MaxParts"`
@@ -1187,6 +1733,37 @@ type TopicConfiguration struct {
Event []string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Event"`
}
type UploadEntry struct {
ChecksumAlgorithm string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ChecksumAlgorithm"`
Initiated time.Time `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Initiated"`
Initiator InitiatorEntry `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Initiator"`
Key string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Key"`
Owner CanonicalUser `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Owner"`
StorageClass string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ StorageClass"`
UploadId string `xml:"http://s3.amazonaws.com/doc/2006-03-01/ UploadId"`
}
func (t *UploadEntry) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
type T UploadEntry
var layout struct {
*T
Initiated *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Initiated"`
}
layout.T = (*T)(t)
layout.Initiated = (*xsdDateTime)(&layout.T.Initiated)
return e.EncodeElement(layout, start)
}
func (t *UploadEntry) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error {
type T UploadEntry
var overlay struct {
*T
Initiated *xsdDateTime `xml:"http://s3.amazonaws.com/doc/2006-03-01/ Initiated"`
}
overlay.T = (*T)(t)
overlay.Initiated = (*xsdDateTime)(&overlay.T.Initiated)
return d.DecodeElement(&overlay, &start)
}
type User struct {
}
+1 -47
View File
@@ -33,7 +33,7 @@ type ListPartsResponse struct {
Key string
UploadID string `xml:"UploadId"`
Initiator Initiator
Initiator CanonicalUser
Owner Owner
// The class of storage used to store the object.
@@ -48,38 +48,6 @@ type ListPartsResponse struct {
Parts []Part `xml:"Part"`
}
// ListMultipartUploadsResponse - format for list multipart uploads response.
type ListMultipartUploadsResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ ListMultipartUploadsResult" json:"-"`
Bucket string
KeyMarker string
UploadIDMarker string `xml:"UploadIdMarker"`
NextKeyMarker string
NextUploadIDMarker string `xml:"NextUploadIdMarker"`
Delimiter string
Prefix string
EncodingType string `xml:"EncodingType,omitempty"`
MaxUploads int
IsTruncated bool
// List of pending uploads.
Uploads []Upload `xml:"Upload"`
// Delimed common prefixes.
CommonPrefixes []CommonPrefix
}
// Upload container for in progress multipart upload
type Upload struct {
Key string
UploadID string `xml:"UploadId"`
Initiator Initiator
Owner Owner
StorageClass string
Initiated string
}
// CommonPrefix container for prefix response in ListObjectsResponse
type CommonPrefix struct {
Prefix string
@@ -167,9 +135,6 @@ type CopyObjectPartResponse struct {
ETag string // md5sum of the copied object part.
}
// Initiator inherit from Owner struct, fields are same
type Initiator Owner
// Owner - bucket owner/principal
type Owner struct {
ID string
@@ -202,14 +167,3 @@ type DeleteError struct {
Key string
VersionID string `xml:"VersionId"`
}
// DeleteObjectsResponse container for multiple object deletes.
type DeleteObjectsResponse struct {
XMLName xml.Name `xml:"http://s3.amazonaws.com/doc/2006-03-01/ DeleteResult" json:"-"`
// Collection of all deleted objects
DeletedObjects []DeleteObject `xml:"Deleted,omitempty"`
// Collection of errors deleting certain objects.
Errors []DeleteError `xml:"Error,omitempty"`
}