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  }