mirror of
https://github.com/versity/versitygw.git
synced 2026-08-21 06:36:23 +00:00
feat: add s3 xsd new schemas, create new routes
add: DeleteObjects new xsd schema add: HeadObject, DeleteObjects api actions
This commit is contained in:
+4
-4
@@ -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
@@ -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
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
}
|
||||
|
||||
|
||||
@@ -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"`
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user