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 }