func NewProxy(conn *grpc.ClientConn) *Proxy {
	ctx := context.Background()
	rc := grpcreflect.NewClient(ctx, rpb.NewServerReflectionClient(conn))
	return &Proxy{
		cc:         conn,
		reflector:  reflection.NewReflector(rc),
		stub:       stub.NewStub(grpcdynamic.NewStub(conn)),
		descSource: grpcurl.DescriptorSourceFromServer(ctx, rc),
	}
}
NewProxy creates a new gRPC client
package proxy
import (
	"context"
	"encoding/json"
	"github.com/fullstorydev/grpcurl"
	perrors "github.com/gdong42/grpc-mate/errors"
	"github.com/gdong42/grpc-mate/metadata"
	"github.com/gdong42/grpc-mate/proxy/reflection"
	"github.com/gdong42/grpc-mate/proxy/stub"
	"github.com/jhump/protoreflect/dynamic/grpcdynamic"
	"github.com/jhump/protoreflect/grpcreflect"
	"github.com/pkg/errors"
	"google.golang.org/grpc"
	"google.golang.org/grpc/connectivity"
	rpb "google.golang.org/grpc/reflection/grpc_reflection_v1alpha"
)
type Proxy struct {
	cc         *grpc.ClientConn
	reflector  reflection.Reflector
	stub       stub.Stub
	descSource grpcurl.DescriptorSource
}