rclone/vendor/storj.io/drpc/drpc.go
Caleb Case e7bd392a69 backend/tardigrade: Upgrade to uplink v1.0.6
This fixes an important bug with listing that affects users with more
than 500 objects in a listing operation.
2020-05-29 18:00:08 +01:00

99 lines
2.8 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package drpc
import (
"context"
"io"
"github.com/zeebo/errs"
)
// These error classes represent some common errors that drpc generates.
var (
Error = errs.Class("drpc")
InternalError = errs.Class("internal error")
ProtocolError = errs.Class("protocol error")
)
// Transport is an interface describing what is required for a drpc connection.
type Transport interface {
io.Reader
io.Writer
io.Closer
}
// Message is a protobuf message, just here so protobuf isn't necessary to
// import or be exposed in the types.
type Message interface {
Reset()
String() string
ProtoMessage()
}
// Conn represents a client connection to a server.
type Conn interface {
// Close closes the connection.
Close() error
// Closed returns true if the connection is definitely closed.
Closed() bool
// Transport returns the transport the connection is using.
Transport() Transport
// Invoke issues a unary rpc to the remote. Only one Invoke or Stream may be
// open at once.
Invoke(ctx context.Context, rpc string, in, out Message) error
// NewStream starts a stream with the remote. Only one Invoke or Stream may be
// open at once.
NewStream(ctx context.Context, rpc string) (Stream, error)
}
// Stream is a bi-directional stream of messages to some other party.
type Stream interface {
// Context returns the context associated with the stream. It is canceled
// when the Stream is closed and no more messages will ever be sent or
// received on it.
Context() context.Context
// MsgSend sends the Message to the remote.
MsgSend(msg Message) error
// MsgRecv receives a Message from the remote.
MsgRecv(msg Message) error
// CloseSend signals to the remote that we will no longer send any messages.
CloseSend() error
// Close closes the stream.
Close() error
}
// Receiver is invoked by a server for a given rpc.
type Receiver = func(srv interface{}, ctx context.Context, in1, in2 interface{}) (out Message, err error)
// Description is the interface implemented by things that can be registered by
// a Server.
type Description interface {
// NumMethods returns the number of methods available.
NumMethods() int
// Method returns the information about the nth method along with a handler
// to invoke it. The method interface that it returns is expected to be
// a method expression like `(*Type).HandlerName`.
Method(n int) (rpc string, receiver Receiver, method interface{}, ok bool)
}
// Mux is a type that can have an implementation and a Description registered with it.
type Mux interface {
Register(srv interface{}, desc Description) error
}
// Handler handles streams and rpcs dispatched to it by a Server.
type Handler interface {
HandleRPC(stream Stream, rpc string) (err error)
}