github.com/MetalBlockchain/metalgo@v1.11.9/vms/rpcchainvm/ghttp/gwriter/writer_client.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package gwriter
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"io"
    10  
    11  	writerpb "github.com/MetalBlockchain/metalgo/proto/pb/io/writer"
    12  )
    13  
    14  var _ io.Writer = (*Client)(nil)
    15  
    16  // Client is an io.Writer that talks over RPC.
    17  type Client struct{ client writerpb.WriterClient }
    18  
    19  // NewClient returns a writer connected to a remote writer
    20  func NewClient(client writerpb.WriterClient) *Client {
    21  	return &Client{client: client}
    22  }
    23  
    24  func (c *Client) Write(p []byte) (int, error) {
    25  	resp, err := c.client.Write(context.Background(), &writerpb.WriteRequest{
    26  		Payload: p,
    27  	})
    28  	if err != nil {
    29  		return 0, err
    30  	}
    31  
    32  	if resp.Error != nil {
    33  		err = errors.New(*resp.Error)
    34  	}
    35  	return int(resp.Written), err
    36  }