| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- package tos
- import (
- "net/http"
- "strconv"
- )
- // ParseListObjectsType2Output Parse the incoming parameters of *http.Response type, and respond to the return value of *ListObjectsType2Output type.
- func ParseListObjectsType2Output(httpRes *http.Response) (*ListObjectsType2Output, error) {
- res := &Response{
- StatusCode: httpRes.StatusCode,
- ContentLength: httpRes.ContentLength,
- Header: httpRes.Header,
- Body: httpRes.Body,
- }
- err := checkError(res, true, 200)
- if err != nil {
- return nil, err
- }
- defer res.Close()
- temp := listObjectsType2Output{
- RequestInfo: res.RequestInfo(),
- }
- if err = marshalOutput(temp.RequestID, res.Body, &temp); err != nil {
- return nil, err
- }
- contents := make([]ListedObjectV2, 0, len(temp.Contents))
- for _, object := range temp.Contents {
- var hashCrc uint64
- if len(object.HashCrc64ecma) == 0 {
- hashCrc = 0
- } else {
- hashCrc, err = strconv.ParseUint(object.HashCrc64ecma, 10, 64)
- if err != nil {
- return nil, &TosServerError{
- TosError: TosError{Message: "tos: server returned invalid HashCrc64Ecma"},
- RequestInfo: RequestInfo{RequestID: temp.RequestID},
- }
- }
- }
- contents = append(contents, ListedObjectV2{
- Key: object.Key,
- LastModified: object.LastModified,
- ETag: object.ETag,
- Size: object.Size,
- Owner: object.Owner,
- StorageClass: object.StorageClass,
- HashCrc64ecma: hashCrc,
- })
- }
- output := ListObjectsType2Output{
- RequestInfo: temp.RequestInfo,
- Name: temp.Name,
- ContinuationToken: temp.ContinuationToken,
- Prefix: temp.Prefix,
- MaxKeys: temp.MaxKeys,
- KeyCount: temp.KeyCount,
- Delimiter: temp.Delimiter,
- IsTruncated: temp.IsTruncated,
- EncodingType: temp.EncodingType,
- CommonPrefixes: temp.CommonPrefixes,
- NextContinuationToken: temp.NextContinuationToken,
- Contents: contents,
- }
- return &output, nil
- }
- // ParseListObjectsV2Output Parse the incoming parameters of *http.Response type, and respond to the return value of *ListObjectsV2Output type.
- func ParseListObjectsV2Output(httpRes *http.Response) (*ListObjectsV2Output, error) {
- res := &Response{
- StatusCode: httpRes.StatusCode,
- ContentLength: httpRes.ContentLength,
- Header: httpRes.Header,
- Body: httpRes.Body,
- }
- err := checkError(res, true, 200)
- if err != nil {
- return nil, err
- }
- defer res.Close()
- temp := listObjectsV2Output{
- RequestInfo: res.RequestInfo(),
- }
- if err = marshalOutput(temp.RequestID, res.Body, &temp); err != nil {
- return nil, err
- }
- contents := make([]ListedObjectV2, 0, len(temp.Contents))
- for _, object := range temp.Contents {
- var hashCrc uint64
- if len(object.HashCrc64ecma) == 0 {
- hashCrc = 0
- } else {
- hashCrc, err = strconv.ParseUint(object.HashCrc64ecma, 10, 64)
- if err != nil {
- return nil, &TosServerError{
- TosError: TosError{Message: "tos: server returned invalid HashCrc64Ecma"},
- RequestInfo: RequestInfo{RequestID: temp.RequestID},
- }
- }
- }
- contents = append(contents, ListedObjectV2{
- Key: object.Key,
- LastModified: object.LastModified,
- ETag: object.ETag,
- Size: object.Size,
- Owner: object.Owner,
- StorageClass: object.StorageClass,
- HashCrc64ecma: uint64(hashCrc),
- })
- }
- output := ListObjectsV2Output{
- RequestInfo: temp.RequestInfo,
- Name: temp.Name,
- Prefix: temp.Prefix,
- Marker: temp.Marker,
- MaxKeys: temp.MaxKeys,
- NextMarker: temp.NextMarker,
- Delimiter: temp.Delimiter,
- IsTruncated: temp.IsTruncated,
- EncodingType: temp.EncodingType,
- CommonPrefixes: temp.CommonPrefixes,
- Contents: contents,
- }
- return &output, nil
- }
- // ParseListObjectVersionsV2Output Parse the incoming parameters of *http.Response type, and respond to the return value of *ListObjectVersionsV2Output type.
- func ParseListObjectVersionsV2Output(httpRes *http.Response) (*ListObjectVersionsV2Output, error) {
- res := &Response{
- StatusCode: httpRes.StatusCode,
- ContentLength: httpRes.ContentLength,
- Header: httpRes.Header,
- Body: httpRes.Body,
- }
- err := checkError(res, true, 200)
- if err != nil {
- return nil, err
- }
- defer res.Close()
- temp := listObjectVersionsV2Output{RequestInfo: res.RequestInfo()}
- if err = marshalOutput(temp.RequestID, res.Body, &temp); err != nil {
- return nil, err
- }
- versions := make([]ListedObjectVersionV2, 0, len(temp.Versions))
- for _, version := range temp.Versions {
- var hashCrc uint64
- if len(version.HashCrc64ecma) == 0 {
- hashCrc = 0
- } else {
- hashCrc, err = strconv.ParseUint(version.HashCrc64ecma, 10, 64)
- if err != nil {
- return nil, &TosServerError{
- TosError: TosError{Message: "tos: server returned invalid HashCrc64Ecma"},
- RequestInfo: RequestInfo{RequestID: temp.RequestID},
- }
- }
- }
- versions = append(versions, ListedObjectVersionV2{
- Key: version.Key,
- LastModified: version.LastModified,
- ETag: version.ETag,
- IsLatest: version.IsLatest,
- Size: version.Size,
- Owner: version.Owner,
- StorageClass: version.StorageClass,
- VersionID: version.VersionID,
- HashCrc64ecma: hashCrc,
- })
- }
- output := ListObjectVersionsV2Output{
- RequestInfo: temp.RequestInfo,
- Name: temp.Name,
- Prefix: temp.Prefix,
- KeyMarker: temp.KeyMarker,
- VersionIDMarker: temp.VersionIDMarker,
- Delimiter: temp.Delimiter,
- EncodingType: temp.EncodingType,
- MaxKeys: temp.MaxKeys,
- NextKeyMarker: temp.NextKeyMarker,
- NextVersionIDMarker: temp.NextVersionIDMarker,
- IsTruncated: temp.IsTruncated,
- CommonPrefixes: temp.CommonPrefixes,
- DeleteMarkers: temp.DeleteMarkers,
- Versions: versions,
- }
- return &output, nil
- }
- // ParseHeadObjectV2Output Parse the incoming parameters of *http.Response type, and respond to the return value of *HeadObjectV2Output type.
- func ParseHeadObjectV2Output(httpRes *http.Response) (*HeadObjectV2Output, error) {
- res := &Response{
- StatusCode: httpRes.StatusCode,
- ContentLength: httpRes.ContentLength,
- Header: httpRes.Header,
- Body: httpRes.Body,
- }
- err := checkError(res, false, 200)
- if err != nil {
- return nil, err
- }
- defer res.Close()
- output := HeadObjectV2Output{
- RequestInfo: res.RequestInfo(),
- }
- output.ObjectMetaV2.fromResponseV2(res)
- return &output, nil
- }
- // ParseGetObjectV2Output Parse the incoming parameters of *http.Response type, and respond to the return value of *GetObjectV2Output type.
- func ParseGetObjectV2Output(httpRes *http.Response, expectedCode int) (*GetObjectV2Output, error) {
- res := &Response{
- StatusCode: httpRes.StatusCode,
- ContentLength: httpRes.ContentLength,
- Header: httpRes.Header,
- Body: httpRes.Body,
- }
- err := checkError(res, true, expectedCode)
- if err != nil {
- return nil, err
- }
- basic := GetObjectBasicOutput{
- RequestInfo: res.RequestInfo(),
- ContentRange: res.Header.Get(HeaderContentRange),
- }
- basic.ObjectMetaV2.fromResponseV2(res)
- output := GetObjectV2Output{
- GetObjectBasicOutput: basic,
- Content: wrapReader(res.Body, res.ContentLength, nil, nil, nil),
- }
- return &output, nil
- }
|