func MaxRecvMsgSize(s int) server.Option {
	return func(o *server.Options) {
		if o.Context == nil {
			o.Context = context.Background()
		}
		o.Context = context.WithValue(o.Context, maxRecvMsgSizeKey{}, s)
	}
}
MaxRecvMsgSize set the maximum size of message that server can receive.
package grpc
import (
	"context"
	"crypto/tls"
	"net"
	"github.com/improbable-eng/grpc-web/go/grpcweb"
	"github.com/micro/micro/v3/service/broker/memory"
	memReg "github.com/micro/micro/v3/service/registry/memory"
	"github.com/micro/micro/v3/service/server"
	"github.com/micro/micro/v3/util/codec"
	"google.golang.org/grpc"
	"google.golang.org/grpc/encoding"
)
type codecsKey struct{}
type grpcOptions struct{}
type netListener struct{}
type maxMsgSizeKey struct{}
type maxRecvMsgSizeKey struct{}
type maxSendMsgSizeKey struct{}
type maxConnKey struct{}
type tlsAuth struct{}
type grpcWebOptions struct{}
type grpcWebPort struct{}
func Codec(contentType string, c encoding.Codec) server.Option {
	return func(o *server.Options) {
		codecs := make(map[string]encoding.Codec)
		if o.Context == nil {
			o.Context = context.Background()
		}
		if v, ok := o.Context.Value(codecsKey{}).(map[string]encoding.Codec); ok && v != nil {
			codecs = v
		}
		codecs[contentType] = c
		o.Context = context.WithValue(o.Context, codecsKey{}, codecs)
	}
}
func AuthTLS(t *tls.Config) server.Option {
	return setServerOption(tlsAuth{}, t)
}
func MaxConn(n int) server.Option {
	return setServerOption(maxConnKey{}, n)
}
func Listener(l net.Listener) server.Option {
	return setServerOption(netListener{}, l)
}
func Options(opts ...grpc.ServerOption) server.Option {
	return setServerOption(grpcOptions{}, opts)
}
func GRPCWebOptions(opts ...grpcweb.Option) server.Option {
	return setServerOption(grpcWebOptions{}, opts)
}
func GRPCWebPort(addr string) server.Option {
	return setServerOption(grpcWebPort{}, addr)
}
func MaxMsgSize(s int) server.Option {
	return setServerOption(maxMsgSizeKey{}, s)
}