You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: gracefulexit_drpc.pb.go
    path of file: ./repos/storj/storagenode/internalpb
    
    the code of the file until where you have to start completion: // Code generated by protoc-gen-go-drpc. DO NOT EDIT.
// protoc-gen-go-drpc version: v0.0.33
// source: gracefulexit.proto

package internalpb

import (
	bytes "bytes"
	context "context"
	errors "errors"

	jsonpb "github.com/gogo/protobuf/jsonpb"
	proto "github.com/gogo/protobuf/proto"

	drpc "storj.io/drpc"
	drpcerr "storj.io/drpc/drpcerr"
)

type drpcEncoding_File_gracefulexit_proto struct{}

func (drpcEncoding_File_gracefulexit_proto) Marshal(msg drpc.Message) ([]byte, error) {
	return proto.Marshal(msg.(proto.Message))
}

func (drpcEncoding_File_gracefulexit_proto) Unmarshal(buf []byte, msg drpc.Message) error {
	return proto.Unmarshal(buf, msg.(proto.Message))
}

func (drpcEncoding_File_gracefulexit_proto) JSONMarshal(msg drpc.Message) ([]byte, error) {
	var buf bytes.Buffer
	err := new(jsonpb.Marshaler).Marshal(&buf, msg.(proto.
    
func (DRPCNodeGracefulExitDescription) Method(n int) (string, drpc.Encoding, drpc.Receiver, interface{}, bool) {
	switch n {
	case 0:
		return "/storagenode.gracefulexit.NodeGracefulExit/GetNonExitingSatellites", drpcEncoding_File_gracefulexit_proto{},
			func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) {
				return srv.(DRPCNodeGracefulExitServer).
					GetNonExitingSatellites(
						ctx,
						in1.(*GetNonExitingSatellitesRequest),
					)
			}, DRPCNodeGracefulExitServer.GetNonExitingSatellites, true
	case 1:
		return "/storagenode.gracefulexit.NodeGracefulExit/InitiateGracefulExit", drpcEncoding_File_gracefulexit_proto{},
			func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) {
				return srv.(DRPCNodeGracefulExitServer).
					InitiateGracefulExit(
						ctx,
						in1.(*InitiateGracefulExitRequest),
					)
			}, DRPCNodeGracefulExitServer.InitiateGracefulExit, true
	case 2:
		return "/storagenode.gracefulexit.NodeGracefulExit/GetExitProgress", drpcEncoding_File_gracefulexit_proto{},
			func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) {
				return srv.(DRPCNodeGracefulExitServer).
					GetExitProgress(
						ctx,
						in1.(*GetExitProgressRequest),
					)
			}, DRPCNodeGracefulExitServer.GetExitProgress, true
	case 3:
		return "/storagenode.gracefulexit.NodeGracefulExit/GracefulExitFeasibility", drpcEncoding_File_gracefulexit_proto{},
			func(srv interface{}, ctx context.Context, in1, in2 interface{}) (drpc.Message, error) {
				return srv.(DRPCNodeGracefulExitServer).
					GracefulExitFeasibility(
						ctx,
						in1.(*GracefulExitFeasibilityRequest),
					)
			}, DRPCNodeGracefulExitServer.GracefulExitFeasibility, true
	default:
		return "", nil, nil, nil, false
	}
}