diff --git a/sdks/storage/cdsapi/object.go b/sdks/storage/cdsapi/object.go index dfc1036..03774d2 100644 --- a/sdks/storage/cdsapi/object.go +++ b/sdks/storage/cdsapi/object.go @@ -456,6 +456,48 @@ func (c *ObjectService) DeleteByPath(req ObjectDeleteByPath) error { return jsonResp.ToError() } +const ObjectClonePath = "/object/clone" + +type ObjectClone struct { + UserID cdssdk.UserID `json:"userID" binding:"required"` + Clonings []CloningObject `json:"clonings" binding:"required"` +} + +type CloningObject struct { + ObjectID cdssdk.ObjectID `json:"objectID" binding:"required"` + NewPath string `json:"newPath" binding:"required"` + NewPackageID cdssdk.PackageID `json:"newPackageID" binding:"required"` +} + +type ObjectCloneResp struct { + Objects []*cdssdk.Object `json:"objects"` +} + +func (c *ObjectService) Clone(req ObjectClone) (*ObjectCloneResp, error) { + url, err := url.JoinPath(c.baseURL, ObjectClonePath) + if err != nil { + return nil, err + } + + resp, err := http2.PostJSON(url, http2.RequestParam{ + Body: req, + }) + if err != nil { + return nil, err + } + + jsonResp, err := ParseJSONResponse[response[ObjectCloneResp]](resp) + if err != nil { + return nil, err + } + + if jsonResp.Code == errorcode.OK { + return &jsonResp.Data, nil + } + + return nil, jsonResp.ToError() +} + const ObjectGetPackageObjectsPath = "/object/getPackageObjects" type ObjectGetPackageObjects struct {