github.com/ava-labs/avalanchego@v1.11.11/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/ava-labs/avalanchego/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 }