Files
node/vms/rpcchainvm/rpchttp/rpcreader/reader_server.go
T

46 lines
1016 B
Go

//go:build grpc
// Copyright (C) 2019-2025, Lux Industries Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package rpcreader
import (
"context"
"io"
readerpb "github.com/luxfi/node/proto/pb/io/reader"
)
var _ readerpb.ReaderServer = (*Server)(nil)
// Server is an io.Reader that is managed over RPC.
type Server struct {
readerpb.UnsafeReaderServer
reader io.Reader
}
// NewServer returns an io.Reader instance managed remotely
func NewServer(reader io.Reader) *Server {
return &Server{reader: reader}
}
func (s *Server) Read(_ context.Context, req *readerpb.ReadRequest) (*readerpb.ReadResponse, error) {
buf := make([]byte, int(req.Length))
n, err := s.reader.Read(buf)
resp := &readerpb.ReadResponse{
Read: buf[:n],
}
if err != nil {
resp.Error = &readerpb.Error{
Message: err.Error(),
}
// Sentinel errors must be special-cased through an error code
if err == io.EOF {
resp.Error.ErrorCode = readerpb.ErrorCode_ERROR_CODE_EOF
}
}
return resp, nil
}