github.com/MetalBlockchain/metalgo@v1.11.9/vms/rpcchainvm/ghttp/greader/reader_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 greader
     5  
     6  import (
     7  	"context"
     8  	"errors"
     9  	"io"
    10  
    11  	readerpb "github.com/MetalBlockchain/metalgo/proto/pb/io/reader"
    12  )
    13  
    14  var _ io.Reader = (*Client)(nil)
    15  
    16  // Client is a reader that talks over RPC.
    17  type Client struct{ client readerpb.ReaderClient }
    18  
    19  // NewClient returns a reader connected to a remote reader
    20  func NewClient(client readerpb.ReaderClient) *Client {
    21  	return &Client{client: client}
    22  }
    23  
    24  func (c *Client) Read(p []byte) (int, error) {
    25  	resp, err := c.client.Read(context.Background(), &readerpb.ReadRequest{
    26  		Length: int32(len(p)),
    27  	})
    28  	if err != nil {
    29  		return 0, err
    30  	}
    31  
    32  	copy(p, resp.Read)
    33  
    34  	if resp.Error != nil {
    35  		err = errors.New(*resp.Error)
    36  	}
    37  	return len(resp.Read), err
    38  }