git.frostfs.info/TrueCloudLab/frostfs-sdk-go@v0.0.0-20241022124111-5361f0ecebd3/client/apemanager_remove_chain.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  // PrmAPEManagerRemoveChain groups parameters of APEManagerRemoveChain operation.
    17  type PrmAPEManagerRemoveChain struct {
    18  	XHeaders []string
    19  
    20  	ChainTarget apeSDK.ChainTarget
    21  
    22  	ChainID apeSDK.ChainID
    23  }
    24  
    25  func (prm *PrmAPEManagerRemoveChain) buildRequest(c *Client) (*apemanagerV2.RemoveChainRequest, error) {
    26  	if len(prm.XHeaders)%2 != 0 {
    27  		return nil, errorInvalidXHeaders
    28  	}
    29  
    30  	req := new(apemanagerV2.RemoveChainRequest)
    31  	reqBody := new(apemanagerV2.RemoveChainRequestBody)
    32  
    33  	reqBody.SetTarget(prm.ChainTarget.ToV2())
    34  	reqBody.SetChainID(prm.ChainID)
    35  
    36  	req.SetBody(reqBody)
    37  
    38  	var meta sessionV2.RequestMetaHeader
    39  	writeXHeadersToMeta(prm.XHeaders, &meta)
    40  
    41  	c.prepareRequest(req, &meta)
    42  
    43  	return req, nil
    44  }
    45  
    46  type ResAPEManagerRemoveChain struct {
    47  	statusRes
    48  }
    49  
    50  // APEManagerRemoveChain removes Chain with ChainID defined for ChainTarget.
    51  func (c *Client) APEManagerRemoveChain(ctx context.Context, prm PrmAPEManagerRemoveChain) (*ResAPEManagerRemoveChain, error) {
    52  	req, err := prm.buildRequest(c)
    53  	if err != nil {
    54  		return nil, err
    55  	}
    56  
    57  	if err := signature.SignServiceMessage(&c.prm.Key, req); err != nil {
    58  		return nil, fmt.Errorf("sign request: %w", err)
    59  	}
    60  
    61  	resp, err := rpcapi.RemoveChain(&c.c, req, client.WithContext(ctx))
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	var res ResAPEManagerRemoveChain
    67  	res.st, err = c.processResponse(resp)
    68  	if err != nil || !apistatus.IsSuccessful(res.st) {
    69  		return &res, err
    70  	}
    71  
    72  	return &res, nil
    73  }