github.com/MetalBlockchain/metalgo@v1.11.9/vms/rpcchainvm/ghttp/greader/reader_server.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 "io" 9 10 readerpb "github.com/MetalBlockchain/metalgo/proto/pb/io/reader" 11 ) 12 13 var _ readerpb.ReaderServer = (*Server)(nil) 14 15 // Server is an io.Reader that is managed over RPC. 16 type Server struct { 17 readerpb.UnsafeReaderServer 18 reader io.Reader 19 } 20 21 // NewServer returns an io.Reader instance managed remotely 22 func NewServer(reader io.Reader) *Server { 23 return &Server{reader: reader} 24 } 25 26 func (s *Server) Read(_ context.Context, req *readerpb.ReadRequest) (*readerpb.ReadResponse, error) { 27 buf := make([]byte, int(req.Length)) 28 n, err := s.reader.Read(buf) 29 resp := &readerpb.ReadResponse{ 30 Read: buf[:n], 31 } 32 if err != nil { 33 errStr := err.Error() 34 resp.Error = &errStr 35 } 36 return resp, nil 37 }