mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-03-08 16:39:29 +00:00
Several packages are only used while running the e2e suite. These packages are less important to update, as the they can not influence the final executable that is part of the Ceph-CSI container-image. By moving these dependencies out of the main Ceph-CSI go.mod, it is easier to identify if a reported CVE affects Ceph-CSI, or only the testing (like most of the Kubernetes CVEs). Signed-off-by: Niels de Vos <ndevos@ibm.com>
239 lines
10 KiB
Go
239 lines
10 KiB
Go
/*
|
|
*
|
|
* Copyright 2024 gRPC authors.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
*/
|
|
|
|
package grpc
|
|
|
|
// ServerStreamingClient represents the client side of a server-streaming (one
|
|
// request, many responses) RPC. It is generic over the type of the response
|
|
// message. It is used in generated code.
|
|
type ServerStreamingClient[Res any] interface {
|
|
// Recv receives the next response message from the server. The client may
|
|
// repeatedly call Recv to read messages from the response stream. If
|
|
// io.EOF is returned, the stream has terminated with an OK status. Any
|
|
// other error is compatible with the status package and indicates the
|
|
// RPC's status code and message.
|
|
Recv() (*Res, error)
|
|
|
|
// ClientStream is embedded to provide Context, Header, and Trailer
|
|
// functionality. No other methods in the ClientStream should be called
|
|
// directly.
|
|
ClientStream
|
|
}
|
|
|
|
// ServerStreamingServer represents the server side of a server-streaming (one
|
|
// request, many responses) RPC. It is generic over the type of the response
|
|
// message. It is used in generated code.
|
|
//
|
|
// To terminate the response stream, return from the handler method and return
|
|
// an error from the status package, or use nil to indicate an OK status code.
|
|
type ServerStreamingServer[Res any] interface {
|
|
// Send sends a response message to the client. The server handler may
|
|
// call Send multiple times to send multiple messages to the client. An
|
|
// error is returned if the stream was terminated unexpectedly, and the
|
|
// handler method should return, as the stream is no longer usable.
|
|
Send(*Res) error
|
|
|
|
// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
|
|
// SetTrailer functionality. No other methods in the ServerStream should
|
|
// be called directly.
|
|
ServerStream
|
|
}
|
|
|
|
// ClientStreamingClient represents the client side of a client-streaming (many
|
|
// requests, one response) RPC. It is generic over both the type of the request
|
|
// message stream and the type of the unary response message. It is used in
|
|
// generated code.
|
|
type ClientStreamingClient[Req any, Res any] interface {
|
|
// Send sends a request message to the server. The client may call Send
|
|
// multiple times to send multiple messages to the server. On error, Send
|
|
// aborts the stream. If the error was generated by the client, the status
|
|
// is returned directly. Otherwise, io.EOF is returned, and the status of
|
|
// the stream may be discovered using CloseAndRecv().
|
|
Send(*Req) error
|
|
|
|
// CloseAndRecv closes the request stream and waits for the server's
|
|
// response. This method must be called once and only once after sending
|
|
// all request messages. Any error returned is implemented by the status
|
|
// package.
|
|
CloseAndRecv() (*Res, error)
|
|
|
|
// ClientStream is embedded to provide Context, Header, and Trailer
|
|
// functionality. No other methods in the ClientStream should be called
|
|
// directly.
|
|
ClientStream
|
|
}
|
|
|
|
// ClientStreamingServer represents the server side of a client-streaming (many
|
|
// requests, one response) RPC. It is generic over both the type of the request
|
|
// message stream and the type of the unary response message. It is used in
|
|
// generated code.
|
|
//
|
|
// To terminate the RPC, call SendAndClose and return nil from the method
|
|
// handler or do not call SendAndClose and return an error from the status
|
|
// package.
|
|
type ClientStreamingServer[Req any, Res any] interface {
|
|
// Recv receives the next request message from the client. The server may
|
|
// repeatedly call Recv to read messages from the request stream. If
|
|
// io.EOF is returned, it indicates the client called CloseAndRecv on its
|
|
// ClientStreamingClient. Any other error indicates the stream was
|
|
// terminated unexpectedly, and the handler method should return, as the
|
|
// stream is no longer usable.
|
|
Recv() (*Req, error)
|
|
|
|
// SendAndClose sends a single response message to the client and closes
|
|
// the stream. This method must be called once and only once after all
|
|
// request messages have been processed. Recv should not be called after
|
|
// calling SendAndClose.
|
|
SendAndClose(*Res) error
|
|
|
|
// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
|
|
// SetTrailer functionality. No other methods in the ServerStream should
|
|
// be called directly.
|
|
ServerStream
|
|
}
|
|
|
|
// BidiStreamingClient represents the client side of a bidirectional-streaming
|
|
// (many requests, many responses) RPC. It is generic over both the type of the
|
|
// request message stream and the type of the response message stream. It is
|
|
// used in generated code.
|
|
type BidiStreamingClient[Req any, Res any] interface {
|
|
// Send sends a request message to the server. The client may call Send
|
|
// multiple times to send multiple messages to the server. On error, Send
|
|
// aborts the stream. If the error was generated by the client, the status
|
|
// is returned directly. Otherwise, io.EOF is returned, and the status of
|
|
// the stream may be discovered using Recv().
|
|
Send(*Req) error
|
|
|
|
// Recv receives the next response message from the server. The client may
|
|
// repeatedly call Recv to read messages from the response stream. If
|
|
// io.EOF is returned, the stream has terminated with an OK status. Any
|
|
// other error is compatible with the status package and indicates the
|
|
// RPC's status code and message.
|
|
Recv() (*Res, error)
|
|
|
|
// ClientStream is embedded to provide Context, Header, Trailer, and
|
|
// CloseSend functionality. No other methods in the ClientStream should be
|
|
// called directly.
|
|
ClientStream
|
|
}
|
|
|
|
// BidiStreamingServer represents the server side of a bidirectional-streaming
|
|
// (many requests, many responses) RPC. It is generic over both the type of the
|
|
// request message stream and the type of the response message stream. It is
|
|
// used in generated code.
|
|
//
|
|
// To terminate the stream, return from the handler method and return
|
|
// an error from the status package, or use nil to indicate an OK status code.
|
|
type BidiStreamingServer[Req any, Res any] interface {
|
|
// Recv receives the next request message from the client. The server may
|
|
// repeatedly call Recv to read messages from the request stream. If
|
|
// io.EOF is returned, it indicates the client called CloseSend on its
|
|
// BidiStreamingClient. Any other error indicates the stream was
|
|
// terminated unexpectedly, and the handler method should return, as the
|
|
// stream is no longer usable.
|
|
Recv() (*Req, error)
|
|
|
|
// Send sends a response message to the client. The server handler may
|
|
// call Send multiple times to send multiple messages to the client. An
|
|
// error is returned if the stream was terminated unexpectedly, and the
|
|
// handler method should return, as the stream is no longer usable.
|
|
Send(*Res) error
|
|
|
|
// ServerStream is embedded to provide Context, SetHeader, SendHeader, and
|
|
// SetTrailer functionality. No other methods in the ServerStream should
|
|
// be called directly.
|
|
ServerStream
|
|
}
|
|
|
|
// GenericClientStream implements the ServerStreamingClient, ClientStreamingClient,
|
|
// and BidiStreamingClient interfaces. It is used in generated code.
|
|
type GenericClientStream[Req any, Res any] struct {
|
|
ClientStream
|
|
}
|
|
|
|
var _ ServerStreamingClient[string] = (*GenericClientStream[int, string])(nil)
|
|
var _ ClientStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
|
|
var _ BidiStreamingClient[int, string] = (*GenericClientStream[int, string])(nil)
|
|
|
|
// Send pushes one message into the stream of requests to be consumed by the
|
|
// server. The type of message which can be sent is determined by the Req type
|
|
// parameter of the GenericClientStream receiver.
|
|
func (x *GenericClientStream[Req, Res]) Send(m *Req) error {
|
|
return x.ClientStream.SendMsg(m)
|
|
}
|
|
|
|
// Recv reads one message from the stream of responses generated by the server.
|
|
// The type of the message returned is determined by the Res type parameter
|
|
// of the GenericClientStream receiver.
|
|
func (x *GenericClientStream[Req, Res]) Recv() (*Res, error) {
|
|
m := new(Res)
|
|
if err := x.ClientStream.RecvMsg(m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// CloseAndRecv closes the sending side of the stream, then receives the unary
|
|
// response from the server. The type of message which it returns is determined
|
|
// by the Res type parameter of the GenericClientStream receiver.
|
|
func (x *GenericClientStream[Req, Res]) CloseAndRecv() (*Res, error) {
|
|
if err := x.ClientStream.CloseSend(); err != nil {
|
|
return nil, err
|
|
}
|
|
m := new(Res)
|
|
if err := x.ClientStream.RecvMsg(m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|
|
|
|
// GenericServerStream implements the ServerStreamingServer, ClientStreamingServer,
|
|
// and BidiStreamingServer interfaces. It is used in generated code.
|
|
type GenericServerStream[Req any, Res any] struct {
|
|
ServerStream
|
|
}
|
|
|
|
var _ ServerStreamingServer[string] = (*GenericServerStream[int, string])(nil)
|
|
var _ ClientStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
|
|
var _ BidiStreamingServer[int, string] = (*GenericServerStream[int, string])(nil)
|
|
|
|
// Send pushes one message into the stream of responses to be consumed by the
|
|
// client. The type of message which can be sent is determined by the Res
|
|
// type parameter of the serverStreamServer receiver.
|
|
func (x *GenericServerStream[Req, Res]) Send(m *Res) error {
|
|
return x.ServerStream.SendMsg(m)
|
|
}
|
|
|
|
// SendAndClose pushes the unary response to the client. The type of message
|
|
// which can be sent is determined by the Res type parameter of the
|
|
// clientStreamServer receiver.
|
|
func (x *GenericServerStream[Req, Res]) SendAndClose(m *Res) error {
|
|
return x.ServerStream.SendMsg(m)
|
|
}
|
|
|
|
// Recv reads one message from the stream of requests generated by the client.
|
|
// The type of the message returned is determined by the Req type parameter
|
|
// of the clientStreamServer receiver.
|
|
func (x *GenericServerStream[Req, Res]) Recv() (*Req, error) {
|
|
m := new(Req)
|
|
if err := x.ServerStream.RecvMsg(m); err != nil {
|
|
return nil, err
|
|
}
|
|
return m, nil
|
|
}
|