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  }