| @@ -34,7 +34,7 @@ type RequestParam struct { | |||||
| func (p *RequestParam) MakeRequest(baseURL string) (*http.Request, error) { | func (p *RequestParam) MakeRequest(baseURL string) (*http.Request, error) { | ||||
| var body io.ReadCloser | var body io.ReadCloser | ||||
| bodyLen := int64(-1) | |||||
| bodyLen := int64(0) | |||||
| if p.Body != nil { | if p.Body != nil { | ||||
| body = p.Body.IntoStream() | body = p.Body.IntoStream() | ||||
| bodyLen = p.Body.Length() | bodyLen = p.Body.Length() | ||||
| @@ -175,11 +175,16 @@ func ParseCodeDataJSONResponse[T any](resp *http.Response, ret T) error { | |||||
| if strings.Contains(contType, http2.ContentTypeJSON) { | if strings.Contains(contType, http2.ContentTypeJSON) { | ||||
| var err error | var err error | ||||
| var r CodeDataResponse[T] | var r CodeDataResponse[T] | ||||
| r.Data = ret | |||||
| if err = serder.JSONToObjectStreamExRaw(resp.Body, &r); err != nil { | if err = serder.JSONToObjectStreamExRaw(resp.Body, &r); err != nil { | ||||
| return fmt.Errorf("parsing response: %w", err) | return fmt.Errorf("parsing response: %w", err) | ||||
| } | } | ||||
| if r.Code != errorcode.OK { | |||||
| return &CodeMessageError{Code: r.Code, Message: r.Message} | |||||
| } | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -35,7 +35,7 @@ func (r *BucketGetByNameResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *BucketService) GetByName(req BucketGetByName) (*BucketGetByNameResp, error) { | func (c *BucketService) GetByName(req BucketGetByName) (*BucketGetByNameResp, error) { | ||||
| return JSONAPI[*BucketGetByNameResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &BucketGetByNameResp{}) | |||||
| } | } | ||||
| const BucketCreatePath = "/bucket/create" | const BucketCreatePath = "/bucket/create" | ||||
| @@ -58,7 +58,7 @@ func (r *BucketCreateResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *BucketService) Create(req BucketCreate) (*BucketCreateResp, error) { | func (c *BucketService) Create(req BucketCreate) (*BucketCreateResp, error) { | ||||
| return JSONAPI[*BucketCreateResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &BucketCreateResp{}) | |||||
| } | } | ||||
| const BucketDeletePath = "/bucket/delete" | const BucketDeletePath = "/bucket/delete" | ||||
| @@ -79,7 +79,7 @@ func (r *BucketDeleteResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *BucketService) Delete(req BucketDelete) error { | func (c *BucketService) Delete(req BucketDelete) error { | ||||
| return JSONAPINoData[*BucketDeleteResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPINoData(c.cfg, http.DefaultClient, &req) | |||||
| } | } | ||||
| const BucketListUserBucketsPath = "/bucket/listUserBuckets" | const BucketListUserBucketsPath = "/bucket/listUserBuckets" | ||||
| @@ -101,5 +101,5 @@ func (r *BucketListUserBucketsResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *BucketService) ListUserBuckets(req BucketListUserBucketsReq) (*BucketListUserBucketsResp, error) { | func (c *BucketService) ListUserBuckets(req BucketListUserBucketsReq) (*BucketListUserBucketsResp, error) { | ||||
| return JSONAPI[*BucketListUserBucketsResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &BucketListUserBucketsResp{}) | |||||
| } | } | ||||
| @@ -26,5 +26,5 @@ func (r *CacheMovePackageResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) CacheMovePackage(req CacheMovePackageReq) (*CacheMovePackageResp, error) { | func (c *Client) CacheMovePackage(req CacheMovePackageReq) (*CacheMovePackageResp, error) { | ||||
| return JSONAPI[*CacheMovePackageResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &CacheMovePackageResp{}) | |||||
| } | } | ||||
| @@ -26,5 +26,5 @@ func (r *HubGetHubsResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) HubGetHubs(req HubGetHubsReq) (*HubGetHubsResp, error) { | func (c *Client) HubGetHubs(req HubGetHubsReq) (*HubGetHubsResp, error) { | ||||
| return JSONAPI[*HubGetHubsResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &HubGetHubsResp{}) | |||||
| } | } | ||||
| @@ -55,7 +55,7 @@ func (r *ObjectListByPathResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) ListByPath(req ObjectListByPath) (*ObjectListByPathResp, error) { | func (c *ObjectService) ListByPath(req ObjectListByPath) (*ObjectListByPathResp, error) { | ||||
| return JSONAPI[*ObjectListByPathResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectListByPathResp{}) | |||||
| } | } | ||||
| const ObjectListByIDsPath = "/object/listByIDs" | const ObjectListByIDsPath = "/object/listByIDs" | ||||
| @@ -78,7 +78,7 @@ func (r *ObjectListByIDsResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) ListByIDs(req ObjectListByIDs) (*ObjectListByIDsResp, error) { | func (c *ObjectService) ListByIDs(req ObjectListByIDs) (*ObjectListByIDsResp, error) { | ||||
| return JSONAPI[*ObjectListByIDsResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectListByIDsResp{}) | |||||
| } | } | ||||
| const ObjectUploadPath = "/object/upload" | const ObjectUploadPath = "/object/upload" | ||||
| @@ -108,6 +108,10 @@ type ObjectUploadResp struct { | |||||
| } | } | ||||
| func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) { | func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) { | ||||
| type uploadInfo struct { | |||||
| Info string `url:"info"` | |||||
| } | |||||
| url, err := url.JoinPath(c.cfg.URL, ObjectUploadPath) | url, err := url.JoinPath(c.cfg.URL, ObjectUploadPath) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -119,7 +123,7 @@ func (c *ObjectService) Upload(req ObjectUpload) (*ObjectUploadResp, error) { | |||||
| } | } | ||||
| resp, err := PostMultiPart(c.cfg, url, | resp, err := PostMultiPart(c.cfg, url, | ||||
| map[string]string{"info": string(infoJSON)}, | |||||
| uploadInfo{Info: string(infoJSON)}, | |||||
| iterator.Map(req.Files, func(src *UploadingObject) (*http2.IterMultiPartFile, error) { | iterator.Map(req.Files, func(src *UploadingObject) (*http2.IterMultiPartFile, error) { | ||||
| return &http2.IterMultiPartFile{ | return &http2.IterMultiPartFile{ | ||||
| FieldName: "files", | FieldName: "files", | ||||
| @@ -305,7 +309,7 @@ func (r *ObjectUpdateInfoResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) UpdateInfo(req ObjectUpdateInfo) (*ObjectUpdateInfoResp, error) { | func (c *ObjectService) UpdateInfo(req ObjectUpdateInfo) (*ObjectUpdateInfoResp, error) { | ||||
| return JSONAPI[*ObjectUpdateInfoResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectUpdateInfoResp{}) | |||||
| } | } | ||||
| const ObjectUpdateInfoByPathPath = "/object/updateInfoByPath" | const ObjectUpdateInfoByPathPath = "/object/updateInfoByPath" | ||||
| @@ -328,7 +332,7 @@ func (r *ObjectUpdateInfoByPathResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) UpdateInfoByPath(req ObjectUpdateInfoByPath) (*ObjectUpdateInfoByPathResp, error) { | func (c *ObjectService) UpdateInfoByPath(req ObjectUpdateInfoByPath) (*ObjectUpdateInfoByPathResp, error) { | ||||
| return JSONAPI[*ObjectUpdateInfoByPathResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectUpdateInfoByPathResp{}) | |||||
| } | } | ||||
| const ObjectMovePath = "/object/move" | const ObjectMovePath = "/object/move" | ||||
| @@ -362,7 +366,7 @@ func (r *ObjectMoveResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) Move(req ObjectMove) (*ObjectMoveResp, error) { | func (c *ObjectService) Move(req ObjectMove) (*ObjectMoveResp, error) { | ||||
| return JSONAPI[*ObjectMoveResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectMoveResp{}) | |||||
| } | } | ||||
| const ObjectDeletePath = "/object/delete" | const ObjectDeletePath = "/object/delete" | ||||
| @@ -383,7 +387,7 @@ func (r *ObjectDeleteResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) Delete(req ObjectDelete) error { | func (c *ObjectService) Delete(req ObjectDelete) error { | ||||
| return JSONAPINoData[*ObjectDeleteResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPINoData(c.cfg, http.DefaultClient, &req) | |||||
| } | } | ||||
| const ObjectDeleteByPathPath = "/object/deleteByPath" | const ObjectDeleteByPathPath = "/object/deleteByPath" | ||||
| @@ -405,7 +409,7 @@ func (r *ObjectDeleteByPathResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) DeleteByPath(req ObjectDeleteByPath) error { | func (c *ObjectService) DeleteByPath(req ObjectDeleteByPath) error { | ||||
| return JSONAPINoData[*ObjectDeleteByPathResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPINoData(c.cfg, http.DefaultClient, &req) | |||||
| } | } | ||||
| const ObjectClonePath = "/object/clone" | const ObjectClonePath = "/object/clone" | ||||
| @@ -434,7 +438,7 @@ func (r *ObjectCloneResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) Clone(req ObjectClone) (*ObjectCloneResp, error) { | func (c *ObjectService) Clone(req ObjectClone) (*ObjectCloneResp, error) { | ||||
| return JSONAPI[*ObjectCloneResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectCloneResp{}) | |||||
| } | } | ||||
| const ObjectGetPackageObjectsPath = "/object/getPackageObjects" | const ObjectGetPackageObjectsPath = "/object/getPackageObjects" | ||||
| @@ -457,7 +461,7 @@ func (r *ObjectGetPackageObjectsResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *ObjectService) GetPackageObjects(req ObjectGetPackageObjects) (*ObjectGetPackageObjectsResp, error) { | func (c *ObjectService) GetPackageObjects(req ObjectGetPackageObjects) (*ObjectGetPackageObjectsResp, error) { | ||||
| return JSONAPI[*ObjectGetPackageObjectsResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectGetPackageObjectsResp{}) | |||||
| } | } | ||||
| const ObjectNewMultipartUploadPath = "/v1/object/newMultipartUpload" | const ObjectNewMultipartUploadPath = "/v1/object/newMultipartUpload" | ||||
| @@ -481,7 +485,7 @@ func (r *ObjectNewMultipartUploadResp) ParseResponse(resp *http.Response) error | |||||
| } | } | ||||
| func (c *ObjectService) NewMultipartUpload(req ObjectNewMultipartUpload) (*ObjectNewMultipartUploadResp, error) { | func (c *ObjectService) NewMultipartUpload(req ObjectNewMultipartUpload) (*ObjectNewMultipartUploadResp, error) { | ||||
| return JSONAPI[*ObjectNewMultipartUploadResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectNewMultipartUploadResp{}) | |||||
| } | } | ||||
| const ObjectUploadPartPath = "/v1/object/uploadPart" | const ObjectUploadPartPath = "/v1/object/uploadPart" | ||||
| @@ -560,5 +564,5 @@ func (r *ObjectCompleteMultipartUploadResp) ParseResponse(resp *http.Response) e | |||||
| } | } | ||||
| func (c *ObjectService) CompleteMultipartUpload(req ObjectCompleteMultipartUpload) (*ObjectCompleteMultipartUploadResp, error) { | func (c *ObjectService) CompleteMultipartUpload(req ObjectCompleteMultipartUpload) (*ObjectCompleteMultipartUploadResp, error) { | ||||
| return JSONAPI[*ObjectCompleteMultipartUploadResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &ObjectCompleteMultipartUploadResp{}) | |||||
| } | } | ||||
| @@ -41,7 +41,7 @@ func (r *PackageGetResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) { | func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) { | ||||
| return JSONAPI[*PackageGetResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetResp{}) | |||||
| } | } | ||||
| const PackageGetByFullNamePath = "/package/getByFullName" | const PackageGetByFullNamePath = "/package/getByFullName" | ||||
| @@ -65,7 +65,7 @@ func (r *PackageGetByFullNameResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *PackageService) GetByName(req PackageGetByFullName) (*PackageGetByFullNameResp, error) { | func (c *PackageService) GetByName(req PackageGetByFullName) (*PackageGetByFullNameResp, error) { | ||||
| return JSONAPI[*PackageGetByFullNameResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetByFullNameResp{}) | |||||
| } | } | ||||
| const PackageCreatePath = "/package/create" | const PackageCreatePath = "/package/create" | ||||
| @@ -89,7 +89,7 @@ func (r *PackageCreateResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) { | func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) { | ||||
| return JSONAPI[*PackageCreateResp](s.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(s.cfg, http.DefaultClient, &req, &PackageCreateResp{}) | |||||
| } | } | ||||
| const PackageCreateLoadPath = "/package/createLoad" | const PackageCreateLoadPath = "/package/createLoad" | ||||
| @@ -164,7 +164,7 @@ func (r *PackageDeleteResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *PackageService) Delete(req PackageDelete) error { | func (c *PackageService) Delete(req PackageDelete) error { | ||||
| return JSONAPINoData[*PackageDeleteResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPINoData(c.cfg, http.DefaultClient, &req) | |||||
| } | } | ||||
| const PackageClonePath = "/package/clone" | const PackageClonePath = "/package/clone" | ||||
| @@ -189,7 +189,7 @@ func (r *PackageCloneResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *PackageService) Clone(req PackageClone) (*PackageCloneResp, error) { | func (c *PackageService) Clone(req PackageClone) (*PackageCloneResp, error) { | ||||
| return JSONAPI[*PackageCloneResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageCloneResp{}) | |||||
| } | } | ||||
| const PackageListBucketPackagesPath = "/package/listBucketPackages" | const PackageListBucketPackagesPath = "/package/listBucketPackages" | ||||
| @@ -212,7 +212,7 @@ func (r *PackageListBucketPackagesResp) ParseResponse(resp *http.Response) error | |||||
| } | } | ||||
| func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*PackageListBucketPackagesResp, error) { | func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*PackageListBucketPackagesResp, error) { | ||||
| return JSONAPI[*PackageListBucketPackagesResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageListBucketPackagesResp{}) | |||||
| } | } | ||||
| const PackageGetCachedStoragesPath = "/package/getCachedStorages" | const PackageGetCachedStoragesPath = "/package/getCachedStorages" | ||||
| @@ -235,5 +235,5 @@ func (r *PackageGetCachedStoragesResp) ParseResponse(resp *http.Response) error | |||||
| } | } | ||||
| func (c *PackageService) GetCachedStorages(req PackageGetCachedStoragesReq) (*PackageGetCachedStoragesResp, error) { | func (c *PackageService) GetCachedStorages(req PackageGetCachedStoragesReq) (*PackageGetCachedStoragesResp, error) { | ||||
| return JSONAPI[*PackageGetCachedStoragesResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetCachedStoragesResp{}) | |||||
| } | } | ||||
| @@ -27,7 +27,7 @@ func (r *StorageLoadPackageResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) StorageLoadPackage(req StorageLoadPackageReq) (*StorageLoadPackageResp, error) { | func (c *Client) StorageLoadPackage(req StorageLoadPackageReq) (*StorageLoadPackageResp, error) { | ||||
| return JSONAPI[*StorageLoadPackageResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &StorageLoadPackageResp{}) | |||||
| } | } | ||||
| const StorageCreatePackagePath = "/storage/createPackage" | const StorageCreatePackagePath = "/storage/createPackage" | ||||
| @@ -54,7 +54,7 @@ func (r *StorageCreatePackageResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) StorageCreatePackage(req StorageCreatePackageReq) (*StorageCreatePackageResp, error) { | func (c *Client) StorageCreatePackage(req StorageCreatePackageReq) (*StorageCreatePackageResp, error) { | ||||
| return JSONAPI[*StorageCreatePackageResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &StorageCreatePackageResp{}) | |||||
| } | } | ||||
| const StorageGetPath = "/storage/get" | const StorageGetPath = "/storage/get" | ||||
| @@ -77,5 +77,5 @@ func (r *StorageGetResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) StorageGet(req StorageGet) (*StorageGetResp, error) { | func (c *Client) StorageGet(req StorageGet) (*StorageGetResp, error) { | ||||
| return JSONAPI[*StorageGetResp](c.cfg, http.DefaultClient, &req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, &req, &StorageGetResp{}) | |||||
| } | } | ||||
| @@ -26,7 +26,7 @@ func (r *UserCreateResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) UserCreate(req *UserCreate) (*UserCreateResp, error) { | func (c *Client) UserCreate(req *UserCreate) (*UserCreateResp, error) { | ||||
| return JSONAPI[*UserCreateResp](c.cfg, http.DefaultClient, req) | |||||
| return JSONAPI(c.cfg, http.DefaultClient, req, &UserCreateResp{}) | |||||
| } | } | ||||
| const UserDeletePath = "/v1/user/delete" | const UserDeletePath = "/v1/user/delete" | ||||
| @@ -46,5 +46,5 @@ func (r *UserDeleteResp) ParseResponse(resp *http.Response) error { | |||||
| } | } | ||||
| func (c *Client) UserDelete(req *UserDelete) error { | func (c *Client) UserDelete(req *UserDelete) error { | ||||
| return JSONAPINoData[*UserDeleteResp](c.cfg, http.DefaultClient, req) | |||||
| return JSONAPINoData(c.cfg, http.DefaultClient, req) | |||||
| } | } | ||||
| @@ -44,33 +44,32 @@ func ParseJSONResponse[TBody any](resp *http.Response) (TBody, error) { | |||||
| return ret, fmt.Errorf("unknow response content type: %s, status: %d, body(prefix): %s", contType, resp.StatusCode, strCont[:math2.Min(len(strCont), 200)]) | return ret, fmt.Errorf("unknow response content type: %s, status: %d, body(prefix): %s", contType, resp.StatusCode, strCont[:math2.Min(len(strCont), 200)]) | ||||
| } | } | ||||
| func JSONAPI[Resp sdks.APIResponse, Req sdks.APIRequest](cfg *Config, cli *http.Client, req Req) (Resp, error) { | |||||
| var re Resp | |||||
| func JSONAPI[Resp sdks.APIResponse, Req sdks.APIRequest](cfg *Config, cli *http.Client, req Req, resp Resp) (Resp, error) { | |||||
| param := req.MakeParam() | param := req.MakeParam() | ||||
| httpReq, err := param.MakeRequest(cfg.URL) | httpReq, err := param.MakeRequest(cfg.URL) | ||||
| if err != nil { | if err != nil { | ||||
| return re, err | |||||
| return resp, err | |||||
| } | } | ||||
| if cfg.AccessKey != "" && cfg.SecretKey != "" { | if cfg.AccessKey != "" && cfg.SecretKey != "" { | ||||
| err = SignWithPayloadHash(httpReq, cfg.AccessKey, cfg.SecretKey, calcSha256(param.Body)) | err = SignWithPayloadHash(httpReq, cfg.AccessKey, cfg.SecretKey, calcSha256(param.Body)) | ||||
| if err != nil { | if err != nil { | ||||
| return re, err | |||||
| return resp, err | |||||
| } | } | ||||
| } | } | ||||
| resp, err := cli.Do(httpReq) | |||||
| httpResp, err := cli.Do(httpReq) | |||||
| if err != nil { | if err != nil { | ||||
| return re, err | |||||
| return resp, err | |||||
| } | } | ||||
| err = re.ParseResponse(resp) | |||||
| return re, err | |||||
| err = resp.ParseResponse(httpResp) | |||||
| return resp, err | |||||
| } | } | ||||
| func JSONAPINoData[Resp sdks.APIResponse, Req sdks.APIRequest](cfg *Config, cli *http.Client, req Req) error { | |||||
| func JSONAPINoData[Req sdks.APIRequest](cfg *Config, cli *http.Client, req Req) error { | |||||
| param := req.MakeParam() | param := req.MakeParam() | ||||
| httpReq, err := param.MakeRequest(cfg.URL) | httpReq, err := param.MakeRequest(cfg.URL) | ||||