2020-04-16 23:03:17 -07:00
|
|
|
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
|
|
|
|
package greader
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"errors"
|
|
|
|
|
2020-04-17 06:47:19 -07:00
|
|
|
"github.com/ava-labs/gecko/vms/rpcchainvm/ghttp/greader/greaderproto"
|
2020-04-16 23:03:17 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
// Client is an implementation of a messenger channel that talks over RPC.
|
2020-04-17 06:47:19 -07:00
|
|
|
type Client struct{ client greaderproto.ReaderClient }
|
2020-04-16 23:03:17 -07:00
|
|
|
|
|
|
|
// NewClient returns a database instance connected to a remote database instance
|
2020-04-17 06:47:19 -07:00
|
|
|
func NewClient(client greaderproto.ReaderClient) *Client {
|
2020-04-16 23:03:17 -07:00
|
|
|
return &Client{client: client}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Read ...
|
|
|
|
func (c *Client) Read(p []byte) (int, error) {
|
2020-04-17 06:47:19 -07:00
|
|
|
resp, err := c.client.Read(context.Background(), &greaderproto.ReadRequest{
|
2020-04-16 23:03:17 -07:00
|
|
|
Length: int32(len(p)),
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
|
|
|
|
copy(p, resp.Read)
|
|
|
|
|
|
|
|
if resp.Errored {
|
|
|
|
err = errors.New(resp.Error)
|
|
|
|
}
|
|
|
|
return len(resp.Read), err
|
|
|
|
}
|