git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/client/apemanager_list_chains.go (about) 1 package client 2 3 import ( 4 "context" 5 "fmt" 6 7 apemanagerV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/apemanager" 8 rpcapi "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc" 9 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/rpc/client" 10 sessionV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/session" 11 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/signature" 12 apeSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/ape" 13 apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" 14 ) 15 16 // PrmAPEManagerListChains groups parameters of APEManagerListChains operation. 17 type PrmAPEManagerListChains struct { 18 XHeaders []string 19 20 ChainTarget apeSDK.ChainTarget 21 } 22 23 func (prm *PrmAPEManagerListChains) buildRequest(c *Client) (*apemanagerV2.ListChainsRequest, error) { 24 if len(prm.XHeaders)%2 != 0 { 25 return nil, errorInvalidXHeaders 26 } 27 28 req := new(apemanagerV2.ListChainsRequest) 29 reqBody := new(apemanagerV2.ListChainsRequestBody) 30 31 reqBody.SetTarget(prm.ChainTarget.ToV2()) 32 33 req.SetBody(reqBody) 34 35 var meta sessionV2.RequestMetaHeader 36 writeXHeadersToMeta(prm.XHeaders, &meta) 37 38 c.prepareRequest(req, &meta) 39 40 return req, nil 41 } 42 43 type ResAPEManagerListChains struct { 44 statusRes 45 46 Chains []apeSDK.Chain 47 } 48 49 // APEManagerListChains lists Chains for ChainTarget. 50 func (c *Client) APEManagerListChains(ctx context.Context, prm PrmAPEManagerListChains) (*ResAPEManagerListChains, error) { 51 req, err := prm.buildRequest(c) 52 if err != nil { 53 return nil, err 54 } 55 56 if err := signature.SignServiceMessage(&c.prm.Key, req); err != nil { 57 return nil, fmt.Errorf("sign request: %w", err) 58 } 59 60 resp, err := rpcapi.ListChains(&c.c, req, client.WithContext(ctx)) 61 if err != nil { 62 return nil, err 63 } 64 65 var res ResAPEManagerListChains 66 res.st, err = c.processResponse(resp) 67 if err != nil || !apistatus.IsSuccessful(res.st) { 68 return &res, err 69 } 70 71 for _, ch := range resp.GetBody().GetChains() { 72 var chSDK apeSDK.Chain 73 if err := chSDK.ReadFromV2(ch); err != nil { 74 return nil, err 75 } 76 res.Chains = append(res.Chains, chSDK) 77 } 78 79 return &res, nil 80 }