/* Package client provides FrostFS API client implementation. The main component is Client type. It is a virtual connection to the network and provides methods for executing operations on the server. Create client instance: var c client.Client Initialize client state: var prm client.PrmInit prm.SetDefaultPrivateKey(key) // ... c.Init(prm) Connect to the FrostFS server: var prm client.PrmDial prm.SetServerURI("localhost:8080") prm.SetDefaultPrivateKey(key) // ... err := c.Dial(prm) // ... Execute FrostFS operation on the server: var prm client.PrmContainerPut prm.SetContainer(cnr) // ... res, err := c.ContainerPut(context.Background(), prm) err := c.Dial(dialPrm) if err == nil { err = apistatus.ErrFromStatus(res.Status()) } // ... Consume custom service of the server: syntax = "proto3"; service CustomService { rpc CustomRPC(CustomRPCRequest) returns (CustomRPCResponse); } import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/client" import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/rpc/common" req := new(CustomRPCRequest) // ... resp := new(CustomRPCResponse) err := c.ExecRaw(func(c *client.Client) error { return client.SendUnary(c, common.CallMethodInfo{ Service: "CustomService", Name: "CustomRPC", }, req, resp) }) // ... Close the connection: err := c.Close() // ... Note that it's not allowed to override Client behaviour directly: the parameters for the all operations are write-only and the results of the all operations are read-only. To be able to override client behavior (e.g. for tests), abstract it with an interface: import "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client" type FrostFSClient interface { // Operations according to the application needs CreateContainer(context.Context, container.Container) error // ... } type client struct { c *client.Client } func (x *client) CreateContainer(context.Context, container.Container) error { // ... } */ package client