mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-18 00:47:48 +08:00
protobuf: remove gogoproto
Removes gogo/protobuf from buildx and updates to a version of moby/buildkit where gogo is removed. This also changes how the proto files are generated. This is because newer versions of protobuf are more strict about name conflicts. If two files have the same name (even if they are relative paths) and are used in different protoc commands, they'll conflict in the registry. Since protobuf file generation doesn't work very well with `paths=source_relative`, this removes the `go:generate` expression and just relies on the dockerfile to perform the generation. Signed-off-by: Jonathan A. Sternberg <jonathan.sternberg@docker.com>
This commit is contained in:
parent
8e47387d02
commit
b35a0f4718
@ -56,7 +56,7 @@ func formatHCLError(err error, files []File) error {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
src := errdefs.Source{
|
src := &errdefs.Source{
|
||||||
Info: &pb.SourceInfo{
|
Info: &pb.SourceInfo{
|
||||||
Filename: d.Subject.Filename,
|
Filename: d.Subject.Filename,
|
||||||
Data: dt,
|
Data: dt,
|
||||||
@ -72,7 +72,7 @@ func formatHCLError(err error, files []File) error {
|
|||||||
|
|
||||||
func toErrRange(in *hcl.Range) *pb.Range {
|
func toErrRange(in *hcl.Range) *pb.Range {
|
||||||
return &pb.Range{
|
return &pb.Range{
|
||||||
Start: pb.Position{Line: int32(in.Start.Line), Character: int32(in.Start.Column)},
|
Start: &pb.Position{Line: int32(in.Start.Line), Character: int32(in.Start.Column)},
|
||||||
End: pb.Position{Line: int32(in.End.Line), Character: int32(in.End.Column)},
|
End: &pb.Position{Line: int32(in.End.Line), Character: int32(in.End.Column)},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import (
|
|||||||
gwclient "github.com/moby/buildkit/frontend/gateway/client"
|
gwclient "github.com/moby/buildkit/frontend/gateway/client"
|
||||||
"github.com/moby/buildkit/session"
|
"github.com/moby/buildkit/session"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Input struct {
|
type Input struct {
|
||||||
@ -106,7 +107,6 @@ func ReadRemoteFiles(ctx context.Context, nodes []builder.Node, url string, name
|
|||||||
}
|
}
|
||||||
return nil, err
|
return nil, err
|
||||||
}, ch)
|
}, ch)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -178,8 +178,8 @@ func filesFromURLRef(ctx context.Context, c gwclient.Client, ref gwclient.Refere
|
|||||||
name := inp.URL
|
name := inp.URL
|
||||||
inp.URL = ""
|
inp.URL = ""
|
||||||
|
|
||||||
if len(dt) > stat.Size() {
|
if len(dt) > proto.Size(stat) {
|
||||||
if stat.Size() > 1024*512 {
|
if proto.Size(stat) > 1024*512 {
|
||||||
return nil, errors.Errorf("non-archive definition URL bigger than maximum allowed size")
|
return nil, errors.Errorf("non-archive definition URL bigger than maximum allowed size")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -50,6 +50,7 @@ import (
|
|||||||
fstypes "github.com/tonistiigi/fsutil/types"
|
fstypes "github.com/tonistiigi/fsutil/types"
|
||||||
"go.opentelemetry.io/otel/trace"
|
"go.opentelemetry.io/otel/trace"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -1136,7 +1137,7 @@ func ReadSourcePolicy() (*spb.Policy, error) {
|
|||||||
var pol spb.Policy
|
var pol spb.Policy
|
||||||
if err := json.Unmarshal(data, &pol); err != nil {
|
if err := json.Unmarshal(data, &pol); err != nil {
|
||||||
// maybe it's in protobuf format?
|
// maybe it's in protobuf format?
|
||||||
e2 := pol.Unmarshal(data)
|
e2 := proto.Unmarshal(data, &pol)
|
||||||
if e2 != nil {
|
if e2 != nil {
|
||||||
return nil, errors.Wrap(err, "failed to parse source policy")
|
return nil, errors.Wrap(err, "failed to parse source policy")
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
controlapi "github.com/moby/buildkit/api/services/control"
|
controlapi "github.com/moby/buildkit/api/services/control"
|
||||||
"github.com/moby/buildkit/client"
|
"github.com/moby/buildkit/client"
|
||||||
provenancetypes "github.com/moby/buildkit/solver/llbsolver/provenance/types"
|
provenancetypes "github.com/moby/buildkit/solver/llbsolver/provenance/types"
|
||||||
|
digest "github.com/opencontainers/go-digest"
|
||||||
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
ocispecs "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"golang.org/x/sync/errgroup"
|
"golang.org/x/sync/errgroup"
|
||||||
@ -124,8 +125,8 @@ func lookupProvenance(res *controlapi.BuildResultInfo) *ocispecs.Descriptor {
|
|||||||
for _, a := range res.Attestations {
|
for _, a := range res.Attestations {
|
||||||
if a.MediaType == "application/vnd.in-toto+json" && strings.HasPrefix(a.Annotations["in-toto.io/predicate-type"], "https://slsa.dev/provenance/") {
|
if a.MediaType == "application/vnd.in-toto+json" && strings.HasPrefix(a.Annotations["in-toto.io/predicate-type"], "https://slsa.dev/provenance/") {
|
||||||
return &ocispecs.Descriptor{
|
return &ocispecs.Descriptor{
|
||||||
Digest: a.Digest,
|
Digest: digest.Digest(a.Digest),
|
||||||
Size: a.Size_,
|
Size: a.Size,
|
||||||
MediaType: a.MediaType,
|
MediaType: a.MediaType,
|
||||||
Annotations: a.Annotations,
|
Annotations: a.Annotations,
|
||||||
}
|
}
|
||||||
|
@ -295,14 +295,14 @@ func (r *ResultHandle) build(buildFunc gateway.BuildFunc) (err error) {
|
|||||||
func (r *ResultHandle) getContainerConfig(cfg *controllerapi.InvokeConfig) (containerCfg gateway.NewContainerRequest, _ error) {
|
func (r *ResultHandle) getContainerConfig(cfg *controllerapi.InvokeConfig) (containerCfg gateway.NewContainerRequest, _ error) {
|
||||||
if r.res != nil && r.solveErr == nil {
|
if r.res != nil && r.solveErr == nil {
|
||||||
logrus.Debugf("creating container from successful build")
|
logrus.Debugf("creating container from successful build")
|
||||||
ccfg, err := containerConfigFromResult(r.res, *cfg)
|
ccfg, err := containerConfigFromResult(r.res, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return containerCfg, err
|
return containerCfg, err
|
||||||
}
|
}
|
||||||
containerCfg = *ccfg
|
containerCfg = *ccfg
|
||||||
} else {
|
} else {
|
||||||
logrus.Debugf("creating container from failed build %+v", cfg)
|
logrus.Debugf("creating container from failed build %+v", cfg)
|
||||||
ccfg, err := containerConfigFromError(r.solveErr, *cfg)
|
ccfg, err := containerConfigFromError(r.solveErr, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return containerCfg, errors.Wrapf(err, "no result nor error is available")
|
return containerCfg, errors.Wrapf(err, "no result nor error is available")
|
||||||
}
|
}
|
||||||
@ -315,19 +315,19 @@ func (r *ResultHandle) getProcessConfig(cfg *controllerapi.InvokeConfig, stdin i
|
|||||||
processCfg := newStartRequest(stdin, stdout, stderr)
|
processCfg := newStartRequest(stdin, stdout, stderr)
|
||||||
if r.res != nil && r.solveErr == nil {
|
if r.res != nil && r.solveErr == nil {
|
||||||
logrus.Debugf("creating container from successful build")
|
logrus.Debugf("creating container from successful build")
|
||||||
if err := populateProcessConfigFromResult(&processCfg, r.res, *cfg); err != nil {
|
if err := populateProcessConfigFromResult(&processCfg, r.res, cfg); err != nil {
|
||||||
return processCfg, err
|
return processCfg, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
logrus.Debugf("creating container from failed build %+v", cfg)
|
logrus.Debugf("creating container from failed build %+v", cfg)
|
||||||
if err := populateProcessConfigFromError(&processCfg, r.solveErr, *cfg); err != nil {
|
if err := populateProcessConfigFromError(&processCfg, r.solveErr, cfg); err != nil {
|
||||||
return processCfg, err
|
return processCfg, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return processCfg, nil
|
return processCfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func containerConfigFromResult(res *gateway.Result, cfg controllerapi.InvokeConfig) (*gateway.NewContainerRequest, error) {
|
func containerConfigFromResult(res *gateway.Result, cfg *controllerapi.InvokeConfig) (*gateway.NewContainerRequest, error) {
|
||||||
if cfg.Initial {
|
if cfg.Initial {
|
||||||
return nil, errors.Errorf("starting from the container from the initial state of the step is supported only on the failed steps")
|
return nil, errors.Errorf("starting from the container from the initial state of the step is supported only on the failed steps")
|
||||||
}
|
}
|
||||||
@ -352,7 +352,7 @@ func containerConfigFromResult(res *gateway.Result, cfg controllerapi.InvokeConf
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func populateProcessConfigFromResult(req *gateway.StartRequest, res *gateway.Result, cfg controllerapi.InvokeConfig) error {
|
func populateProcessConfigFromResult(req *gateway.StartRequest, res *gateway.Result, cfg *controllerapi.InvokeConfig) error {
|
||||||
imgData := res.Metadata[exptypes.ExporterImageConfigKey]
|
imgData := res.Metadata[exptypes.ExporterImageConfigKey]
|
||||||
var img *specs.Image
|
var img *specs.Image
|
||||||
if len(imgData) > 0 {
|
if len(imgData) > 0 {
|
||||||
@ -403,7 +403,7 @@ func populateProcessConfigFromResult(req *gateway.StartRequest, res *gateway.Res
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func containerConfigFromError(solveErr *errdefs.SolveError, cfg controllerapi.InvokeConfig) (*gateway.NewContainerRequest, error) {
|
func containerConfigFromError(solveErr *errdefs.SolveError, cfg *controllerapi.InvokeConfig) (*gateway.NewContainerRequest, error) {
|
||||||
exec, err := execOpFromError(solveErr)
|
exec, err := execOpFromError(solveErr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -431,7 +431,7 @@ func containerConfigFromError(solveErr *errdefs.SolveError, cfg controllerapi.In
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func populateProcessConfigFromError(req *gateway.StartRequest, solveErr *errdefs.SolveError, cfg controllerapi.InvokeConfig) error {
|
func populateProcessConfigFromError(req *gateway.StartRequest, solveErr *errdefs.SolveError, cfg *controllerapi.InvokeConfig) error {
|
||||||
exec, err := execOpFromError(solveErr)
|
exec, err := execOpFromError(solveErr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -11,6 +11,7 @@ import (
|
|||||||
"github.com/moby/buildkit/client/llb"
|
"github.com/moby/buildkit/client/llb"
|
||||||
gwclient "github.com/moby/buildkit/frontend/gateway/client"
|
gwclient "github.com/moby/buildkit/frontend/gateway/client"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func createTempDockerfileFromURL(ctx context.Context, d *driver.DriverHandle, url string, pw progress.Writer) (string, error) {
|
func createTempDockerfileFromURL(ctx context.Context, d *driver.DriverHandle, url string, pw progress.Writer) (string, error) {
|
||||||
@ -43,7 +44,7 @@ func createTempDockerfileFromURL(ctx context.Context, d *driver.DriverHandle, ur
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if stat.Size() > 512*1024 {
|
if proto.Size(stat) > 512*1024 {
|
||||||
return nil, errors.Errorf("Dockerfile %s bigger than allowed max size", url)
|
return nil, errors.Errorf("Dockerfile %s bigger than allowed max size", url)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +64,6 @@ func createTempDockerfileFromURL(ctx context.Context, d *driver.DriverHandle, ur
|
|||||||
out = dir
|
out = dir
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}, ch)
|
}, ch)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ import (
|
|||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
"google.golang.org/grpc/codes"
|
"google.golang.org/grpc/codes"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
type buildOptions struct {
|
type buildOptions struct {
|
||||||
@ -408,7 +409,7 @@ func getImageID(resp map[string]string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func runBasicBuild(ctx context.Context, dockerCli command.Cli, opts *controllerapi.BuildOptions, printer *progress.Printer) (*client.SolveResponse, *build.Inputs, error) {
|
func runBasicBuild(ctx context.Context, dockerCli command.Cli, opts *controllerapi.BuildOptions, printer *progress.Printer) (*client.SolveResponse, *build.Inputs, error) {
|
||||||
resp, res, dfmap, err := cbuild.RunBuild(ctx, dockerCli, *opts, dockerCli.In(), printer, false)
|
resp, res, dfmap, err := cbuild.RunBuild(ctx, dockerCli, opts, dockerCli.In(), printer, false)
|
||||||
if res != nil {
|
if res != nil {
|
||||||
res.Done()
|
res.Done()
|
||||||
}
|
}
|
||||||
@ -458,7 +459,7 @@ func runControllerBuild(ctx context.Context, dockerCli command.Cli, opts *contro
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ref, resp, inputs, err = c.Build(ctx, *opts, pr, printer)
|
ref, resp, inputs, err = c.Build(ctx, opts, pr, printer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var be *controllererrors.BuildError
|
var be *controllererrors.BuildError
|
||||||
if errors.As(err, &be) {
|
if errors.As(err, &be) {
|
||||||
@ -920,9 +921,9 @@ func printResult(w io.Writer, f *controllerapi.CallFunc, res map[string]string,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if inp.DockerfileMappingSrc != "" {
|
if inp.DockerfileMappingSrc != "" {
|
||||||
newSourceInfo := *sourceInfo
|
newSourceInfo := proto.Clone(sourceInfo).(*solverpb.SourceInfo)
|
||||||
newSourceInfo.Filename = inp.DockerfileMappingSrc
|
newSourceInfo.Filename = inp.DockerfileMappingSrc
|
||||||
return &newSourceInfo
|
return newSourceInfo
|
||||||
}
|
}
|
||||||
return sourceInfo
|
return sourceInfo
|
||||||
}
|
}
|
||||||
@ -1012,7 +1013,7 @@ func (cfg *invokeConfig) runDebug(ctx context.Context, ref string, options *cont
|
|||||||
return nil, errors.Errorf("failed to configure terminal: %v", err)
|
return nil, errors.Errorf("failed to configure terminal: %v", err)
|
||||||
}
|
}
|
||||||
defer con.Reset()
|
defer con.Reset()
|
||||||
return monitor.RunMonitor(ctx, ref, options, cfg.InvokeConfig, c, stdin, stdout, stderr, progress)
|
return monitor.RunMonitor(ctx, ref, options, &cfg.InvokeConfig, c, stdin, stdout, stderr, progress)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *invokeConfig) parseInvokeConfig(invoke, on string) error {
|
func (cfg *invokeConfig) parseInvokeConfig(invoke, on string) error {
|
||||||
|
@ -64,7 +64,7 @@ func RootCmd(dockerCli command.Cli, children ...DebuggableCmd) *cobra.Command {
|
|||||||
return errors.Errorf("failed to configure terminal: %v", err)
|
return errors.Errorf("failed to configure terminal: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = monitor.RunMonitor(ctx, "", nil, controllerapi.InvokeConfig{
|
_, err = monitor.RunMonitor(ctx, "", nil, &controllerapi.InvokeConfig{
|
||||||
Tty: true,
|
Tty: true,
|
||||||
}, c, dockerCli.In(), os.Stdout, os.Stderr, printer)
|
}, c, dockerCli.In(), os.Stdout, os.Stderr, printer)
|
||||||
con.Reset()
|
con.Reset()
|
||||||
|
@ -122,8 +122,11 @@ func runInspect(ctx context.Context, dockerCli command.Cli, in inspectOptions) e
|
|||||||
if rule.KeepDuration > 0 {
|
if rule.KeepDuration > 0 {
|
||||||
fmt.Fprintf(w, "\tKeep Duration:\t%v\n", rule.KeepDuration.String())
|
fmt.Fprintf(w, "\tKeep Duration:\t%v\n", rule.KeepDuration.String())
|
||||||
}
|
}
|
||||||
if rule.KeepBytes > 0 {
|
if rule.MinStorage > 0 {
|
||||||
fmt.Fprintf(w, "\tKeep Bytes:\t%s\n", units.BytesSize(float64(rule.KeepBytes)))
|
fmt.Fprintf(w, "\tMin Storage:\t%s\n", units.BytesSize(float64(rule.MinStorage)))
|
||||||
|
}
|
||||||
|
if rule.MaxStorage > 0 {
|
||||||
|
fmt.Fprintf(w, "\tMax Storage:\t%s\n", units.BytesSize(float64(rule.MaxStorage)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for f, dt := range nodes[i].Files {
|
for f, dt := range nodes[i].Files {
|
||||||
|
@ -22,12 +22,13 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type pruneOptions struct {
|
type pruneOptions struct {
|
||||||
builder string
|
builder string
|
||||||
all bool
|
all bool
|
||||||
filter opts.FilterOpt
|
filter opts.FilterOpt
|
||||||
keepStorage opts.MemBytes
|
minStorage opts.MemBytes
|
||||||
force bool
|
maxStorage opts.MemBytes
|
||||||
verbose bool
|
force bool
|
||||||
|
verbose bool
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -106,7 +107,7 @@ func runPrune(ctx context.Context, dockerCli command.Cli, opts pruneOptions) err
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
popts := []client.PruneOption{
|
popts := []client.PruneOption{
|
||||||
client.WithKeepOpt(pi.KeepDuration, opts.keepStorage.Value()),
|
client.WithKeepOpt(pi.KeepDuration, opts.minStorage.Value(), opts.maxStorage.Value(), 0),
|
||||||
client.WithFilter(pi.Filter),
|
client.WithFilter(pi.Filter),
|
||||||
}
|
}
|
||||||
if opts.all {
|
if opts.all {
|
||||||
@ -148,10 +149,14 @@ func pruneCmd(dockerCli command.Cli, rootOpts *rootOptions) *cobra.Command {
|
|||||||
flags := cmd.Flags()
|
flags := cmd.Flags()
|
||||||
flags.BoolVarP(&options.all, "all", "a", false, "Include internal/frontend images")
|
flags.BoolVarP(&options.all, "all", "a", false, "Include internal/frontend images")
|
||||||
flags.Var(&options.filter, "filter", `Provide filter values (e.g., "until=24h")`)
|
flags.Var(&options.filter, "filter", `Provide filter values (e.g., "until=24h")`)
|
||||||
flags.Var(&options.keepStorage, "keep-storage", "Amount of disk space to keep for cache")
|
flags.Var(&options.minStorage, "min-storage", "Minimum amount of disk space to keep for cache")
|
||||||
|
flags.Var(&options.maxStorage, "max-storage", "Maximum amount of disk space to keep for cache")
|
||||||
flags.BoolVar(&options.verbose, "verbose", false, "Provide a more verbose output")
|
flags.BoolVar(&options.verbose, "verbose", false, "Provide a more verbose output")
|
||||||
flags.BoolVarP(&options.force, "force", "f", false, "Do not prompt for confirmation")
|
flags.BoolVarP(&options.force, "force", "f", false, "Do not prompt for confirmation")
|
||||||
|
|
||||||
|
flags.Var(&options.maxStorage, "keep-storage", "Amount of disk space to keep for cache")
|
||||||
|
flags.MarkDeprecated("keep-storage", "keep-storage flag has been changed to max-storage")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ const defaultTargetName = "default"
|
|||||||
// NOTE: When an error happens during the build and this function acquires the debuggable *build.ResultHandle,
|
// NOTE: When an error happens during the build and this function acquires the debuggable *build.ResultHandle,
|
||||||
// this function returns it in addition to the error (i.e. it does "return nil, res, err"). The caller can
|
// this function returns it in addition to the error (i.e. it does "return nil, res, err"). The caller can
|
||||||
// inspect the result and debug the cause of that error.
|
// inspect the result and debug the cause of that error.
|
||||||
func RunBuild(ctx context.Context, dockerCli command.Cli, in controllerapi.BuildOptions, inStream io.Reader, progress progress.Writer, generateResult bool) (*client.SolveResponse, *build.ResultHandle, *build.Inputs, error) {
|
func RunBuild(ctx context.Context, dockerCli command.Cli, in *controllerapi.BuildOptions, inStream io.Reader, progress progress.Writer, generateResult bool) (*client.SolveResponse, *build.ResultHandle, *build.Inputs, error) {
|
||||||
if in.NoCache && len(in.NoCacheFilter) > 0 {
|
if in.NoCache && len(in.NoCacheFilter) > 0 {
|
||||||
return nil, nil, nil, errors.Errorf("--no-cache and --no-cache-filter cannot currently be used together")
|
return nil, nil, nil, errors.Errorf("--no-cache and --no-cache-filter cannot currently be used together")
|
||||||
}
|
}
|
||||||
|
@ -11,12 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type BuildxController interface {
|
type BuildxController interface {
|
||||||
Build(ctx context.Context, options controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (ref string, resp *client.SolveResponse, inputs *build.Inputs, err error)
|
Build(ctx context.Context, options *controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (ref string, resp *client.SolveResponse, inputs *build.Inputs, err error)
|
||||||
// Invoke starts an IO session into the specified process.
|
// Invoke starts an IO session into the specified process.
|
||||||
// If pid doesn't matche to any running processes, it starts a new process with the specified config.
|
// If pid doesn't matche to any running processes, it starts a new process with the specified config.
|
||||||
// If there is no container running or InvokeConfig.Rollback is speicfied, the process will start in a newly created container.
|
// If there is no container running or InvokeConfig.Rollback is speicfied, the process will start in a newly created container.
|
||||||
// NOTE: If needed, in the future, we can split this API into three APIs (NewContainer, NewProcess and Attach).
|
// NOTE: If needed, in the future, we can split this API into three APIs (NewContainer, NewProcess and Attach).
|
||||||
Invoke(ctx context.Context, ref, pid string, options controllerapi.InvokeConfig, ioIn io.ReadCloser, ioOut io.WriteCloser, ioErr io.WriteCloser) error
|
Invoke(ctx context.Context, ref, pid string, options *controllerapi.InvokeConfig, ioIn io.ReadCloser, ioOut io.WriteCloser, ioErr io.WriteCloser) error
|
||||||
Kill(ctx context.Context) error
|
Kill(ctx context.Context) error
|
||||||
Close() error
|
Close() error
|
||||||
List(ctx context.Context) (refs []string, _ error)
|
List(ctx context.Context) (refs []string, _ error)
|
||||||
|
@ -10,7 +10,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type BuildError struct {
|
type BuildError struct {
|
||||||
Build
|
*Build
|
||||||
error
|
error
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,16 +19,16 @@ func (e *BuildError) Unwrap() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (e *BuildError) ToProto() grpcerrors.TypedErrorProto {
|
func (e *BuildError) ToProto() grpcerrors.TypedErrorProto {
|
||||||
return &e.Build
|
return e.Build
|
||||||
}
|
}
|
||||||
|
|
||||||
func WrapBuild(err error, ref string) error {
|
func WrapBuild(err error, ref string) error {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return &BuildError{Build: Build{Ref: ref}, error: err}
|
return &BuildError{Build: &Build{Ref: ref}, error: err}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Build) WrapError(err error) error {
|
func (b *Build) WrapError(err error) error {
|
||||||
return &BuildError{error: err, Build: *b}
|
return &BuildError{error: err, Build: b}
|
||||||
}
|
}
|
||||||
|
@ -1,77 +1,147 @@
|
|||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||||
// source: errdefs.proto
|
// versions:
|
||||||
|
// protoc-gen-go v1.34.1
|
||||||
|
// protoc v3.11.4
|
||||||
|
// source: github.com/docker/buildx/controller/errdefs/errdefs.proto
|
||||||
|
|
||||||
package errdefs
|
package errdefs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
fmt "fmt"
|
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||||
proto "github.com/gogo/protobuf/proto"
|
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||||
_ "github.com/moby/buildkit/solver/pb"
|
reflect "reflect"
|
||||||
math "math"
|
sync "sync"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
const (
|
||||||
var _ = proto.Marshal
|
// Verify that this generated code is sufficiently up-to-date.
|
||||||
var _ = fmt.Errorf
|
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||||
var _ = math.Inf
|
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||||
|
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
)
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
type Build struct {
|
type Build struct {
|
||||||
Ref string `protobuf:"bytes,1,opt,name=Ref,proto3" json:"Ref,omitempty"`
|
state protoimpl.MessageState
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
sizeCache protoimpl.SizeCache
|
||||||
XXX_unrecognized []byte `json:"-"`
|
unknownFields protoimpl.UnknownFields
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
|
Ref string `protobuf:"bytes,1,opt,name=Ref,proto3" json:"Ref,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *Build) Reset() { *m = Build{} }
|
func (x *Build) Reset() {
|
||||||
func (m *Build) String() string { return proto.CompactTextString(m) }
|
*x = Build{}
|
||||||
func (*Build) ProtoMessage() {}
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_github_com_docker_buildx_controller_errdefs_errdefs_proto_msgTypes[0]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *Build) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*Build) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *Build) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_github_com_docker_buildx_controller_errdefs_errdefs_proto_msgTypes[0]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use Build.ProtoReflect.Descriptor instead.
|
||||||
func (*Build) Descriptor() ([]byte, []int) {
|
func (*Build) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_689dc58a5060aff5, []int{0}
|
return file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescGZIP(), []int{0}
|
||||||
}
|
|
||||||
func (m *Build) XXX_Unmarshal(b []byte) error {
|
|
||||||
return xxx_messageInfo_Build.Unmarshal(m, b)
|
|
||||||
}
|
|
||||||
func (m *Build) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
return xxx_messageInfo_Build.Marshal(b, m, deterministic)
|
|
||||||
}
|
|
||||||
func (m *Build) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Build.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Build) XXX_Size() int {
|
|
||||||
return xxx_messageInfo_Build.Size(m)
|
|
||||||
}
|
|
||||||
func (m *Build) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Build.DiscardUnknown(m)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var xxx_messageInfo_Build proto.InternalMessageInfo
|
func (x *Build) GetRef() string {
|
||||||
|
if x != nil {
|
||||||
func (m *Build) GetRef() string {
|
return x.Ref
|
||||||
if m != nil {
|
|
||||||
return m.Ref
|
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
var File_github_com_docker_buildx_controller_errdefs_errdefs_proto protoreflect.FileDescriptor
|
||||||
proto.RegisterType((*Build)(nil), "errdefs.Build")
|
|
||||||
|
var file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDesc = []byte{
|
||||||
|
0x0a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x6f, 0x63,
|
||||||
|
0x6b, 0x65, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x78, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72,
|
||||||
|
0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x65, 0x72, 0x72, 0x64, 0x65, 0x66, 0x73, 0x2f, 0x65, 0x72,
|
||||||
|
0x72, 0x64, 0x65, 0x66, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x15, 0x64, 0x6f, 0x63,
|
||||||
|
0x6b, 0x65, 0x72, 0x2e, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x78, 0x2e, 0x65, 0x72, 0x72, 0x64, 0x65,
|
||||||
|
0x66, 0x73, 0x22, 0x19, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x52,
|
||||||
|
0x65, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x52, 0x65, 0x66, 0x42, 0x2d, 0x5a,
|
||||||
|
0x2b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x64, 0x6f, 0x63, 0x6b,
|
||||||
|
0x65, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x78, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
|
||||||
|
0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x65, 0x72, 0x72, 0x64, 0x65, 0x66, 0x73, 0x62, 0x06, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("errdefs.proto", fileDescriptor_689dc58a5060aff5) }
|
var (
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescOnce sync.Once
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescData = file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDesc
|
||||||
|
)
|
||||||
|
|
||||||
var fileDescriptor_689dc58a5060aff5 = []byte{
|
func file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescGZIP() []byte {
|
||||||
// 111 bytes of a gzipped FileDescriptorProto
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescOnce.Do(func() {
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0x4d, 0x2d, 0x2a, 0x4a,
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescData = protoimpl.X.CompressGZIP(file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescData)
|
||||||
0x49, 0x4d, 0x2b, 0xd6, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0x62, 0x87, 0x72, 0xa5, 0x74, 0xd2,
|
})
|
||||||
0x33, 0x4b, 0x32, 0x4a, 0x93, 0xf4, 0x92, 0xf3, 0x73, 0xf5, 0x73, 0xf3, 0x93, 0x2a, 0xf5, 0x93,
|
return file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDescData
|
||||||
0x4a, 0x33, 0x73, 0x52, 0xb2, 0x33, 0x4b, 0xf4, 0x8b, 0xf3, 0x73, 0xca, 0x52, 0x8b, 0xf4, 0x0b,
|
}
|
||||||
0x92, 0xf4, 0xf3, 0x0b, 0xa0, 0xda, 0x94, 0x24, 0xb9, 0x58, 0x9d, 0x40, 0xf2, 0x42, 0x02, 0x5c,
|
|
||||||
0xcc, 0x41, 0xa9, 0x69, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x20, 0x66, 0x12, 0x1b, 0x58,
|
var file_github_com_docker_buildx_controller_errdefs_errdefs_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
|
||||||
0x85, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0x56, 0x52, 0x41, 0x91, 0x69, 0x00, 0x00, 0x00,
|
var file_github_com_docker_buildx_controller_errdefs_errdefs_proto_goTypes = []interface{}{
|
||||||
|
(*Build)(nil), // 0: docker.buildx.errdefs.Build
|
||||||
|
}
|
||||||
|
var file_github_com_docker_buildx_controller_errdefs_errdefs_proto_depIdxs = []int32{
|
||||||
|
0, // [0:0] is the sub-list for method output_type
|
||||||
|
0, // [0:0] is the sub-list for method input_type
|
||||||
|
0, // [0:0] is the sub-list for extension type_name
|
||||||
|
0, // [0:0] is the sub-list for extension extendee
|
||||||
|
0, // [0:0] is the sub-list for field type_name
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() { file_github_com_docker_buildx_controller_errdefs_errdefs_proto_init() }
|
||||||
|
func file_github_com_docker_buildx_controller_errdefs_errdefs_proto_init() {
|
||||||
|
if File_github_com_docker_buildx_controller_errdefs_errdefs_proto != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !protoimpl.UnsafeEnabled {
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*Build); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type x struct{}
|
||||||
|
out := protoimpl.TypeBuilder{
|
||||||
|
File: protoimpl.DescBuilder{
|
||||||
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
|
RawDescriptor: file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDesc,
|
||||||
|
NumEnums: 0,
|
||||||
|
NumMessages: 1,
|
||||||
|
NumExtensions: 0,
|
||||||
|
NumServices: 0,
|
||||||
|
},
|
||||||
|
GoTypes: file_github_com_docker_buildx_controller_errdefs_errdefs_proto_goTypes,
|
||||||
|
DependencyIndexes: file_github_com_docker_buildx_controller_errdefs_errdefs_proto_depIdxs,
|
||||||
|
MessageInfos: file_github_com_docker_buildx_controller_errdefs_errdefs_proto_msgTypes,
|
||||||
|
}.Build()
|
||||||
|
File_github_com_docker_buildx_controller_errdefs_errdefs_proto = out.File
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_rawDesc = nil
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_goTypes = nil
|
||||||
|
file_github_com_docker_buildx_controller_errdefs_errdefs_proto_depIdxs = nil
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
|
|
||||||
package errdefs;
|
package docker.buildx.errdefs;
|
||||||
|
|
||||||
import "github.com/moby/buildkit/solver/pb/ops.proto";
|
option go_package = "github.com/docker/buildx/controller/errdefs";
|
||||||
|
|
||||||
message Build {
|
message Build {
|
||||||
string Ref = 1;
|
string Ref = 1;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
package errdefs
|
|
||||||
|
|
||||||
//go:generate protoc -I=. -I=../../vendor/ --gogo_out=plugins=grpc:. errdefs.proto
|
|
@ -42,7 +42,7 @@ type localController struct {
|
|||||||
buildOnGoing atomic.Bool
|
buildOnGoing atomic.Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *localController) Build(ctx context.Context, options controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (string, *client.SolveResponse, *build.Inputs, error) {
|
func (b *localController) Build(ctx context.Context, options *controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (string, *client.SolveResponse, *build.Inputs, error) {
|
||||||
if !b.buildOnGoing.CompareAndSwap(false, true) {
|
if !b.buildOnGoing.CompareAndSwap(false, true) {
|
||||||
return "", nil, nil, errors.New("build ongoing")
|
return "", nil, nil, errors.New("build ongoing")
|
||||||
}
|
}
|
||||||
@ -53,7 +53,7 @@ func (b *localController) Build(ctx context.Context, options controllerapi.Build
|
|||||||
if res != nil {
|
if res != nil {
|
||||||
b.buildConfig = buildConfig{
|
b.buildConfig = buildConfig{
|
||||||
resultCtx: res,
|
resultCtx: res,
|
||||||
buildOptions: &options,
|
buildOptions: options,
|
||||||
}
|
}
|
||||||
if buildErr != nil {
|
if buildErr != nil {
|
||||||
buildErr = controllererrors.WrapBuild(buildErr, b.ref)
|
buildErr = controllererrors.WrapBuild(buildErr, b.ref)
|
||||||
@ -83,7 +83,7 @@ func (b *localController) cancelRunningProcesses() {
|
|||||||
b.processes.CancelRunningProcesses()
|
b.processes.CancelRunningProcesses()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *localController) Invoke(ctx context.Context, ref string, pid string, cfg controllerapi.InvokeConfig, ioIn io.ReadCloser, ioOut io.WriteCloser, ioErr io.WriteCloser) error {
|
func (b *localController) Invoke(ctx context.Context, ref string, pid string, cfg *controllerapi.InvokeConfig, ioIn io.ReadCloser, ioOut io.WriteCloser, ioErr io.WriteCloser) error {
|
||||||
if ref != b.ref {
|
if ref != b.ref {
|
||||||
return errors.Errorf("unknown ref %q", ref)
|
return errors.Errorf("unknown ref %q", ref)
|
||||||
}
|
}
|
||||||
@ -95,7 +95,7 @@ func (b *localController) Invoke(ctx context.Context, ref string, pid string, cf
|
|||||||
return errors.New("no build result is registered")
|
return errors.New("no build result is registered")
|
||||||
}
|
}
|
||||||
var err error
|
var err error
|
||||||
proc, err = b.processes.StartProcess(pid, b.buildConfig.resultCtx, &cfg)
|
proc, err = b.processes.StartProcess(pid, b.buildConfig.resultCtx, cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@ package buildx.controller.v1;
|
|||||||
import "github.com/moby/buildkit/api/services/control/control.proto";
|
import "github.com/moby/buildkit/api/services/control/control.proto";
|
||||||
import "github.com/moby/buildkit/sourcepolicy/pb/policy.proto";
|
import "github.com/moby/buildkit/sourcepolicy/pb/policy.proto";
|
||||||
|
|
||||||
option go_package = "pb";
|
option go_package = "github.com/docker/buildx/controller/pb";
|
||||||
|
|
||||||
service Controller {
|
service Controller {
|
||||||
rpc Build(BuildRequest) returns (BuildResponse);
|
rpc Build(BuildRequest) returns (BuildResponse);
|
||||||
|
452
controller/pb/controller_grpc.pb.go
Normal file
452
controller/pb/controller_grpc.pb.go
Normal file
@ -0,0 +1,452 @@
|
|||||||
|
// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// - protoc-gen-go-grpc v1.5.1
|
||||||
|
// - protoc v3.11.4
|
||||||
|
// source: github.com/docker/buildx/controller/pb/controller.proto
|
||||||
|
|
||||||
|
package pb
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
grpc "google.golang.org/grpc"
|
||||||
|
codes "google.golang.org/grpc/codes"
|
||||||
|
status "google.golang.org/grpc/status"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
// Requires gRPC-Go v1.64.0 or later.
|
||||||
|
const _ = grpc.SupportPackageIsVersion9
|
||||||
|
|
||||||
|
const (
|
||||||
|
Controller_Build_FullMethodName = "/buildx.controller.v1.Controller/Build"
|
||||||
|
Controller_Inspect_FullMethodName = "/buildx.controller.v1.Controller/Inspect"
|
||||||
|
Controller_Status_FullMethodName = "/buildx.controller.v1.Controller/Status"
|
||||||
|
Controller_Input_FullMethodName = "/buildx.controller.v1.Controller/Input"
|
||||||
|
Controller_Invoke_FullMethodName = "/buildx.controller.v1.Controller/Invoke"
|
||||||
|
Controller_List_FullMethodName = "/buildx.controller.v1.Controller/List"
|
||||||
|
Controller_Disconnect_FullMethodName = "/buildx.controller.v1.Controller/Disconnect"
|
||||||
|
Controller_Info_FullMethodName = "/buildx.controller.v1.Controller/Info"
|
||||||
|
Controller_ListProcesses_FullMethodName = "/buildx.controller.v1.Controller/ListProcesses"
|
||||||
|
Controller_DisconnectProcess_FullMethodName = "/buildx.controller.v1.Controller/DisconnectProcess"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ControllerClient is the client API for Controller service.
|
||||||
|
//
|
||||||
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||||
|
type ControllerClient interface {
|
||||||
|
Build(ctx context.Context, in *BuildRequest, opts ...grpc.CallOption) (*BuildResponse, error)
|
||||||
|
Inspect(ctx context.Context, in *InspectRequest, opts ...grpc.CallOption) (*InspectResponse, error)
|
||||||
|
Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StatusResponse], error)
|
||||||
|
Input(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[InputMessage, InputResponse], error)
|
||||||
|
Invoke(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[Message, Message], error)
|
||||||
|
List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error)
|
||||||
|
Disconnect(ctx context.Context, in *DisconnectRequest, opts ...grpc.CallOption) (*DisconnectResponse, error)
|
||||||
|
Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error)
|
||||||
|
ListProcesses(ctx context.Context, in *ListProcessesRequest, opts ...grpc.CallOption) (*ListProcessesResponse, error)
|
||||||
|
DisconnectProcess(ctx context.Context, in *DisconnectProcessRequest, opts ...grpc.CallOption) (*DisconnectProcessResponse, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type controllerClient struct {
|
||||||
|
cc grpc.ClientConnInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewControllerClient(cc grpc.ClientConnInterface) ControllerClient {
|
||||||
|
return &controllerClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) Build(ctx context.Context, in *BuildRequest, opts ...grpc.CallOption) (*BuildResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(BuildResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_Build_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) Inspect(ctx context.Context, in *InspectRequest, opts ...grpc.CallOption) (*InspectResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(InspectResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_Inspect_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) Status(ctx context.Context, in *StatusRequest, opts ...grpc.CallOption) (grpc.ServerStreamingClient[StatusResponse], error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
stream, err := c.cc.NewStream(ctx, &Controller_ServiceDesc.Streams[0], Controller_Status_FullMethodName, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
x := &grpc.GenericClientStream[StatusRequest, StatusResponse]{ClientStream: stream}
|
||||||
|
if err := x.ClientStream.SendMsg(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := x.ClientStream.CloseSend(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_StatusClient = grpc.ServerStreamingClient[StatusResponse]
|
||||||
|
|
||||||
|
func (c *controllerClient) Input(ctx context.Context, opts ...grpc.CallOption) (grpc.ClientStreamingClient[InputMessage, InputResponse], error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
stream, err := c.cc.NewStream(ctx, &Controller_ServiceDesc.Streams[1], Controller_Input_FullMethodName, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
x := &grpc.GenericClientStream[InputMessage, InputResponse]{ClientStream: stream}
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_InputClient = grpc.ClientStreamingClient[InputMessage, InputResponse]
|
||||||
|
|
||||||
|
func (c *controllerClient) Invoke(ctx context.Context, opts ...grpc.CallOption) (grpc.BidiStreamingClient[Message, Message], error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
stream, err := c.cc.NewStream(ctx, &Controller_ServiceDesc.Streams[2], Controller_Invoke_FullMethodName, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
x := &grpc.GenericClientStream[Message, Message]{ClientStream: stream}
|
||||||
|
return x, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_InvokeClient = grpc.BidiStreamingClient[Message, Message]
|
||||||
|
|
||||||
|
func (c *controllerClient) List(ctx context.Context, in *ListRequest, opts ...grpc.CallOption) (*ListResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(ListResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_List_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) Disconnect(ctx context.Context, in *DisconnectRequest, opts ...grpc.CallOption) (*DisconnectResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(DisconnectResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_Disconnect_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) Info(ctx context.Context, in *InfoRequest, opts ...grpc.CallOption) (*InfoResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(InfoResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_Info_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) ListProcesses(ctx context.Context, in *ListProcessesRequest, opts ...grpc.CallOption) (*ListProcessesResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(ListProcessesResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_ListProcesses_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *controllerClient) DisconnectProcess(ctx context.Context, in *DisconnectProcessRequest, opts ...grpc.CallOption) (*DisconnectProcessResponse, error) {
|
||||||
|
cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...)
|
||||||
|
out := new(DisconnectProcessResponse)
|
||||||
|
err := c.cc.Invoke(ctx, Controller_DisconnectProcess_FullMethodName, in, out, cOpts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ControllerServer is the server API for Controller service.
|
||||||
|
// All implementations should embed UnimplementedControllerServer
|
||||||
|
// for forward compatibility.
|
||||||
|
type ControllerServer interface {
|
||||||
|
Build(context.Context, *BuildRequest) (*BuildResponse, error)
|
||||||
|
Inspect(context.Context, *InspectRequest) (*InspectResponse, error)
|
||||||
|
Status(*StatusRequest, grpc.ServerStreamingServer[StatusResponse]) error
|
||||||
|
Input(grpc.ClientStreamingServer[InputMessage, InputResponse]) error
|
||||||
|
Invoke(grpc.BidiStreamingServer[Message, Message]) error
|
||||||
|
List(context.Context, *ListRequest) (*ListResponse, error)
|
||||||
|
Disconnect(context.Context, *DisconnectRequest) (*DisconnectResponse, error)
|
||||||
|
Info(context.Context, *InfoRequest) (*InfoResponse, error)
|
||||||
|
ListProcesses(context.Context, *ListProcessesRequest) (*ListProcessesResponse, error)
|
||||||
|
DisconnectProcess(context.Context, *DisconnectProcessRequest) (*DisconnectProcessResponse, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnimplementedControllerServer should be embedded to have
|
||||||
|
// forward compatible implementations.
|
||||||
|
//
|
||||||
|
// NOTE: this should be embedded by value instead of pointer to avoid a nil
|
||||||
|
// pointer dereference when methods are called.
|
||||||
|
type UnimplementedControllerServer struct{}
|
||||||
|
|
||||||
|
func (UnimplementedControllerServer) Build(context.Context, *BuildRequest) (*BuildResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method Build not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Inspect(context.Context, *InspectRequest) (*InspectResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method Inspect not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Status(*StatusRequest, grpc.ServerStreamingServer[StatusResponse]) error {
|
||||||
|
return status.Errorf(codes.Unimplemented, "method Status not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Input(grpc.ClientStreamingServer[InputMessage, InputResponse]) error {
|
||||||
|
return status.Errorf(codes.Unimplemented, "method Input not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Invoke(grpc.BidiStreamingServer[Message, Message]) error {
|
||||||
|
return status.Errorf(codes.Unimplemented, "method Invoke not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) List(context.Context, *ListRequest) (*ListResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method List not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Disconnect(context.Context, *DisconnectRequest) (*DisconnectResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method Disconnect not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) Info(context.Context, *InfoRequest) (*InfoResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method Info not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) ListProcesses(context.Context, *ListProcessesRequest) (*ListProcessesResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method ListProcesses not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) DisconnectProcess(context.Context, *DisconnectProcessRequest) (*DisconnectProcessResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method DisconnectProcess not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedControllerServer) testEmbeddedByValue() {}
|
||||||
|
|
||||||
|
// UnsafeControllerServer may be embedded to opt out of forward compatibility for this service.
|
||||||
|
// Use of this interface is not recommended, as added methods to ControllerServer will
|
||||||
|
// result in compilation errors.
|
||||||
|
type UnsafeControllerServer interface {
|
||||||
|
mustEmbedUnimplementedControllerServer()
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterControllerServer(s grpc.ServiceRegistrar, srv ControllerServer) {
|
||||||
|
// If the following call pancis, it indicates UnimplementedControllerServer was
|
||||||
|
// embedded by pointer and is nil. This will cause panics if an
|
||||||
|
// unimplemented method is ever invoked, so we test this at initialization
|
||||||
|
// time to prevent it from happening at runtime later due to I/O.
|
||||||
|
if t, ok := srv.(interface{ testEmbeddedByValue() }); ok {
|
||||||
|
t.testEmbeddedByValue()
|
||||||
|
}
|
||||||
|
s.RegisterService(&Controller_ServiceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_Build_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(BuildRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).Build(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_Build_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).Build(ctx, req.(*BuildRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_Inspect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(InspectRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).Inspect(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_Inspect_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).Inspect(ctx, req.(*InspectRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_Status_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
|
m := new(StatusRequest)
|
||||||
|
if err := stream.RecvMsg(m); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return srv.(ControllerServer).Status(m, &grpc.GenericServerStream[StatusRequest, StatusResponse]{ServerStream: stream})
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_StatusServer = grpc.ServerStreamingServer[StatusResponse]
|
||||||
|
|
||||||
|
func _Controller_Input_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
|
return srv.(ControllerServer).Input(&grpc.GenericServerStream[InputMessage, InputResponse]{ServerStream: stream})
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_InputServer = grpc.ClientStreamingServer[InputMessage, InputResponse]
|
||||||
|
|
||||||
|
func _Controller_Invoke_Handler(srv interface{}, stream grpc.ServerStream) error {
|
||||||
|
return srv.(ControllerServer).Invoke(&grpc.GenericServerStream[Message, Message]{ServerStream: stream})
|
||||||
|
}
|
||||||
|
|
||||||
|
// This type alias is provided for backwards compatibility with existing code that references the prior non-generic stream type by name.
|
||||||
|
type Controller_InvokeServer = grpc.BidiStreamingServer[Message, Message]
|
||||||
|
|
||||||
|
func _Controller_List_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(ListRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).List(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_List_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).List(ctx, req.(*ListRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_Disconnect_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(DisconnectRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).Disconnect(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_Disconnect_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).Disconnect(ctx, req.(*DisconnectRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_Info_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(InfoRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).Info(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_Info_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).Info(ctx, req.(*InfoRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_ListProcesses_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(ListProcessesRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).ListProcesses(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_ListProcesses_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).ListProcesses(ctx, req.(*ListProcessesRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Controller_DisconnectProcess_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(DisconnectProcessRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(ControllerServer).DisconnectProcess(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: Controller_DisconnectProcess_FullMethodName,
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(ControllerServer).DisconnectProcess(ctx, req.(*DisconnectProcessRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Controller_ServiceDesc is the grpc.ServiceDesc for Controller service.
|
||||||
|
// It's only intended for direct use with grpc.RegisterService,
|
||||||
|
// and not to be introspected or modified (even as a copy)
|
||||||
|
var Controller_ServiceDesc = grpc.ServiceDesc{
|
||||||
|
ServiceName: "buildx.controller.v1.Controller",
|
||||||
|
HandlerType: (*ControllerServer)(nil),
|
||||||
|
Methods: []grpc.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "Build",
|
||||||
|
Handler: _Controller_Build_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Inspect",
|
||||||
|
Handler: _Controller_Inspect_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "List",
|
||||||
|
Handler: _Controller_List_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Disconnect",
|
||||||
|
Handler: _Controller_Disconnect_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "Info",
|
||||||
|
Handler: _Controller_Info_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "ListProcesses",
|
||||||
|
Handler: _Controller_ListProcesses_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "DisconnectProcess",
|
||||||
|
Handler: _Controller_DisconnectProcess_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc.StreamDesc{
|
||||||
|
{
|
||||||
|
StreamName: "Status",
|
||||||
|
Handler: _Controller_Status_Handler,
|
||||||
|
ServerStreams: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
StreamName: "Input",
|
||||||
|
Handler: _Controller_Input_Handler,
|
||||||
|
ClientStreams: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
StreamName: "Invoke",
|
||||||
|
Handler: _Controller_Invoke_Handler,
|
||||||
|
ServerStreams: true,
|
||||||
|
ClientStreams: true,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Metadata: "github.com/docker/buildx/controller/pb/controller.proto",
|
||||||
|
}
|
@ -1,3 +0,0 @@
|
|||||||
package pb
|
|
||||||
|
|
||||||
//go:generate protoc -I=. -I=../../vendor/ --gogo_out=plugins=grpc:. controller.proto
|
|
@ -3,10 +3,10 @@ package pb
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestResolvePaths(t *testing.T) {
|
func TestResolvePaths(t *testing.T) {
|
||||||
@ -16,54 +16,58 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
require.NoError(t, os.Chdir(tmpwd))
|
require.NoError(t, os.Chdir(tmpwd))
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
options BuildOptions
|
options *BuildOptions
|
||||||
want BuildOptions
|
want *BuildOptions
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "contextpath",
|
name: "contextpath",
|
||||||
options: BuildOptions{ContextPath: "test"},
|
options: &BuildOptions{ContextPath: "test"},
|
||||||
want: BuildOptions{ContextPath: filepath.Join(tmpwd, "test")},
|
want: &BuildOptions{ContextPath: filepath.Join(tmpwd, "test")},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "contextpath-cwd",
|
name: "contextpath-cwd",
|
||||||
options: BuildOptions{ContextPath: "."},
|
options: &BuildOptions{ContextPath: "."},
|
||||||
want: BuildOptions{ContextPath: tmpwd},
|
want: &BuildOptions{ContextPath: tmpwd},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "contextpath-dash",
|
name: "contextpath-dash",
|
||||||
options: BuildOptions{ContextPath: "-"},
|
options: &BuildOptions{ContextPath: "-"},
|
||||||
want: BuildOptions{ContextPath: "-"},
|
want: &BuildOptions{ContextPath: "-"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "contextpath-ssh",
|
name: "contextpath-ssh",
|
||||||
options: BuildOptions{ContextPath: "git@github.com:docker/buildx.git"},
|
options: &BuildOptions{ContextPath: "git@github.com:docker/buildx.git"},
|
||||||
want: BuildOptions{ContextPath: "git@github.com:docker/buildx.git"},
|
want: &BuildOptions{ContextPath: "git@github.com:docker/buildx.git"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dockerfilename",
|
name: "dockerfilename",
|
||||||
options: BuildOptions{DockerfileName: "test", ContextPath: "."},
|
options: &BuildOptions{DockerfileName: "test", ContextPath: "."},
|
||||||
want: BuildOptions{DockerfileName: filepath.Join(tmpwd, "test"), ContextPath: tmpwd},
|
want: &BuildOptions{DockerfileName: filepath.Join(tmpwd, "test"), ContextPath: tmpwd},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dockerfilename-dash",
|
name: "dockerfilename-dash",
|
||||||
options: BuildOptions{DockerfileName: "-", ContextPath: "."},
|
options: &BuildOptions{DockerfileName: "-", ContextPath: "."},
|
||||||
want: BuildOptions{DockerfileName: "-", ContextPath: tmpwd},
|
want: &BuildOptions{DockerfileName: "-", ContextPath: tmpwd},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "dockerfilename-remote",
|
name: "dockerfilename-remote",
|
||||||
options: BuildOptions{DockerfileName: "test", ContextPath: "git@github.com:docker/buildx.git"},
|
options: &BuildOptions{DockerfileName: "test", ContextPath: "git@github.com:docker/buildx.git"},
|
||||||
want: BuildOptions{DockerfileName: "test", ContextPath: "git@github.com:docker/buildx.git"},
|
want: &BuildOptions{DockerfileName: "test", ContextPath: "git@github.com:docker/buildx.git"},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "contexts",
|
name: "contexts",
|
||||||
options: BuildOptions{NamedContexts: map[string]string{"a": "test1", "b": "test2",
|
options: &BuildOptions{NamedContexts: map[string]string{
|
||||||
"alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git"}},
|
"a": "test1", "b": "test2",
|
||||||
want: BuildOptions{NamedContexts: map[string]string{"a": filepath.Join(tmpwd, "test1"), "b": filepath.Join(tmpwd, "test2"),
|
"alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git",
|
||||||
"alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git"}},
|
}},
|
||||||
|
want: &BuildOptions{NamedContexts: map[string]string{
|
||||||
|
"a": filepath.Join(tmpwd, "test1"), "b": filepath.Join(tmpwd, "test2"),
|
||||||
|
"alpine": "docker-image://alpine@sha256:0123456789", "project": "https://github.com/myuser/project.git",
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "cache-from",
|
name: "cache-from",
|
||||||
options: BuildOptions{
|
options: &BuildOptions{
|
||||||
CacheFrom: []*CacheOptionsEntry{
|
CacheFrom: []*CacheOptionsEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -75,7 +79,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: BuildOptions{
|
want: &BuildOptions{
|
||||||
CacheFrom: []*CacheOptionsEntry{
|
CacheFrom: []*CacheOptionsEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -90,7 +94,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "cache-to",
|
name: "cache-to",
|
||||||
options: BuildOptions{
|
options: &BuildOptions{
|
||||||
CacheTo: []*CacheOptionsEntry{
|
CacheTo: []*CacheOptionsEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -102,7 +106,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: BuildOptions{
|
want: &BuildOptions{
|
||||||
CacheTo: []*CacheOptionsEntry{
|
CacheTo: []*CacheOptionsEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -117,7 +121,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "exports",
|
name: "exports",
|
||||||
options: BuildOptions{
|
options: &BuildOptions{
|
||||||
Exports: []*ExportEntry{
|
Exports: []*ExportEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -145,7 +149,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: BuildOptions{
|
want: &BuildOptions{
|
||||||
Exports: []*ExportEntry{
|
Exports: []*ExportEntry{
|
||||||
{
|
{
|
||||||
Type: "local",
|
Type: "local",
|
||||||
@ -176,7 +180,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "secrets",
|
name: "secrets",
|
||||||
options: BuildOptions{
|
options: &BuildOptions{
|
||||||
Secrets: []*Secret{
|
Secrets: []*Secret{
|
||||||
{
|
{
|
||||||
FilePath: "test1",
|
FilePath: "test1",
|
||||||
@ -191,7 +195,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: BuildOptions{
|
want: &BuildOptions{
|
||||||
Secrets: []*Secret{
|
Secrets: []*Secret{
|
||||||
{
|
{
|
||||||
FilePath: filepath.Join(tmpwd, "test1"),
|
FilePath: filepath.Join(tmpwd, "test1"),
|
||||||
@ -209,7 +213,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "ssh",
|
name: "ssh",
|
||||||
options: BuildOptions{
|
options: &BuildOptions{
|
||||||
SSH: []*SSH{
|
SSH: []*SSH{
|
||||||
{
|
{
|
||||||
ID: "default",
|
ID: "default",
|
||||||
@ -221,7 +225,7 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
want: BuildOptions{
|
want: &BuildOptions{
|
||||||
SSH: []*SSH{
|
SSH: []*SSH{
|
||||||
{
|
{
|
||||||
ID: "default",
|
ID: "default",
|
||||||
@ -238,10 +242,10 @@ func TestResolvePaths(t *testing.T) {
|
|||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
tt := tt
|
tt := tt
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
got, err := ResolveOptionPaths(&tt.options)
|
got, err := ResolveOptionPaths(tt.options)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
if !reflect.DeepEqual(tt.want, *got) {
|
if !proto.Equal(tt.want, got) {
|
||||||
t.Fatalf("expected %#v, got %#v", tt.want, *got)
|
t.Fatalf("expected %#v, got %#v", tt.want, got)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
package pb
|
package pb
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/docker/buildx/util/progress"
|
"github.com/docker/buildx/util/progress"
|
||||||
control "github.com/moby/buildkit/api/services/control"
|
control "github.com/moby/buildkit/api/services/control"
|
||||||
"github.com/moby/buildkit/client"
|
"github.com/moby/buildkit/client"
|
||||||
"github.com/opencontainers/go-digest"
|
"github.com/opencontainers/go-digest"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
)
|
)
|
||||||
|
|
||||||
type writer struct {
|
type writer struct {
|
||||||
@ -33,11 +36,11 @@ func ToControlStatus(s *client.SolveStatus) *StatusResponse {
|
|||||||
resp := StatusResponse{}
|
resp := StatusResponse{}
|
||||||
for _, v := range s.Vertexes {
|
for _, v := range s.Vertexes {
|
||||||
resp.Vertexes = append(resp.Vertexes, &control.Vertex{
|
resp.Vertexes = append(resp.Vertexes, &control.Vertex{
|
||||||
Digest: v.Digest,
|
Digest: string(v.Digest),
|
||||||
Inputs: v.Inputs,
|
Inputs: digestSliceToPB(v.Inputs),
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Started: v.Started,
|
Started: timestampToPB(v.Started),
|
||||||
Completed: v.Completed,
|
Completed: timestampToPB(v.Completed),
|
||||||
Error: v.Error,
|
Error: v.Error,
|
||||||
Cached: v.Cached,
|
Cached: v.Cached,
|
||||||
ProgressGroup: v.ProgressGroup,
|
ProgressGroup: v.ProgressGroup,
|
||||||
@ -46,26 +49,26 @@ func ToControlStatus(s *client.SolveStatus) *StatusResponse {
|
|||||||
for _, v := range s.Statuses {
|
for _, v := range s.Statuses {
|
||||||
resp.Statuses = append(resp.Statuses, &control.VertexStatus{
|
resp.Statuses = append(resp.Statuses, &control.VertexStatus{
|
||||||
ID: v.ID,
|
ID: v.ID,
|
||||||
Vertex: v.Vertex,
|
Vertex: string(v.Vertex),
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Total: v.Total,
|
Total: v.Total,
|
||||||
Current: v.Current,
|
Current: v.Current,
|
||||||
Timestamp: v.Timestamp,
|
Timestamp: timestamppb.New(v.Timestamp),
|
||||||
Started: v.Started,
|
Started: timestampToPB(v.Started),
|
||||||
Completed: v.Completed,
|
Completed: timestampToPB(v.Completed),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, v := range s.Logs {
|
for _, v := range s.Logs {
|
||||||
resp.Logs = append(resp.Logs, &control.VertexLog{
|
resp.Logs = append(resp.Logs, &control.VertexLog{
|
||||||
Vertex: v.Vertex,
|
Vertex: string(v.Vertex),
|
||||||
Stream: int64(v.Stream),
|
Stream: int64(v.Stream),
|
||||||
Msg: v.Data,
|
Msg: v.Data,
|
||||||
Timestamp: v.Timestamp,
|
Timestamp: timestamppb.New(v.Timestamp),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, v := range s.Warnings {
|
for _, v := range s.Warnings {
|
||||||
resp.Warnings = append(resp.Warnings, &control.VertexWarning{
|
resp.Warnings = append(resp.Warnings, &control.VertexWarning{
|
||||||
Vertex: v.Vertex,
|
Vertex: string(v.Vertex),
|
||||||
Level: int64(v.Level),
|
Level: int64(v.Level),
|
||||||
Short: v.Short,
|
Short: v.Short,
|
||||||
Detail: v.Detail,
|
Detail: v.Detail,
|
||||||
@ -81,11 +84,11 @@ func FromControlStatus(resp *StatusResponse) *client.SolveStatus {
|
|||||||
s := client.SolveStatus{}
|
s := client.SolveStatus{}
|
||||||
for _, v := range resp.Vertexes {
|
for _, v := range resp.Vertexes {
|
||||||
s.Vertexes = append(s.Vertexes, &client.Vertex{
|
s.Vertexes = append(s.Vertexes, &client.Vertex{
|
||||||
Digest: v.Digest,
|
Digest: digest.Digest(v.Digest),
|
||||||
Inputs: v.Inputs,
|
Inputs: digestSliceFromPB(v.Inputs),
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Started: v.Started,
|
Started: timestampFromPB(v.Started),
|
||||||
Completed: v.Completed,
|
Completed: timestampFromPB(v.Completed),
|
||||||
Error: v.Error,
|
Error: v.Error,
|
||||||
Cached: v.Cached,
|
Cached: v.Cached,
|
||||||
ProgressGroup: v.ProgressGroup,
|
ProgressGroup: v.ProgressGroup,
|
||||||
@ -94,26 +97,26 @@ func FromControlStatus(resp *StatusResponse) *client.SolveStatus {
|
|||||||
for _, v := range resp.Statuses {
|
for _, v := range resp.Statuses {
|
||||||
s.Statuses = append(s.Statuses, &client.VertexStatus{
|
s.Statuses = append(s.Statuses, &client.VertexStatus{
|
||||||
ID: v.ID,
|
ID: v.ID,
|
||||||
Vertex: v.Vertex,
|
Vertex: digest.Digest(v.Vertex),
|
||||||
Name: v.Name,
|
Name: v.Name,
|
||||||
Total: v.Total,
|
Total: v.Total,
|
||||||
Current: v.Current,
|
Current: v.Current,
|
||||||
Timestamp: v.Timestamp,
|
Timestamp: v.Timestamp.AsTime(),
|
||||||
Started: v.Started,
|
Started: timestampFromPB(v.Started),
|
||||||
Completed: v.Completed,
|
Completed: timestampFromPB(v.Completed),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, v := range resp.Logs {
|
for _, v := range resp.Logs {
|
||||||
s.Logs = append(s.Logs, &client.VertexLog{
|
s.Logs = append(s.Logs, &client.VertexLog{
|
||||||
Vertex: v.Vertex,
|
Vertex: digest.Digest(v.Vertex),
|
||||||
Stream: int(v.Stream),
|
Stream: int(v.Stream),
|
||||||
Data: v.Msg,
|
Data: v.Msg,
|
||||||
Timestamp: v.Timestamp,
|
Timestamp: v.Timestamp.AsTime(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
for _, v := range resp.Warnings {
|
for _, v := range resp.Warnings {
|
||||||
s.Warnings = append(s.Warnings, &client.VertexWarning{
|
s.Warnings = append(s.Warnings, &client.VertexWarning{
|
||||||
Vertex: v.Vertex,
|
Vertex: digest.Digest(v.Vertex),
|
||||||
Level: int(v.Level),
|
Level: int(v.Level),
|
||||||
Short: v.Short,
|
Short: v.Short,
|
||||||
Detail: v.Detail,
|
Detail: v.Detail,
|
||||||
@ -124,3 +127,38 @@ func FromControlStatus(resp *StatusResponse) *client.SolveStatus {
|
|||||||
}
|
}
|
||||||
return &s
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func timestampFromPB(ts *timestamppb.Timestamp) *time.Time {
|
||||||
|
if ts == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
t := ts.AsTime()
|
||||||
|
if t.IsZero() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return &t
|
||||||
|
}
|
||||||
|
|
||||||
|
func timestampToPB(ts *time.Time) *timestamppb.Timestamp {
|
||||||
|
if ts == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return timestamppb.New(*ts)
|
||||||
|
}
|
||||||
|
|
||||||
|
func digestSliceFromPB(elems []string) []digest.Digest {
|
||||||
|
clone := make([]digest.Digest, len(elems))
|
||||||
|
for i, e := range elems {
|
||||||
|
clone[i] = digest.Digest(e)
|
||||||
|
}
|
||||||
|
return clone
|
||||||
|
}
|
||||||
|
|
||||||
|
func digestSliceToPB(elems []digest.Digest) []string {
|
||||||
|
clone := make([]string, len(elems))
|
||||||
|
for i, e := range elems {
|
||||||
|
clone[i] = string(e)
|
||||||
|
}
|
||||||
|
return clone
|
||||||
|
}
|
||||||
|
@ -28,6 +28,7 @@ func NewClient(ctx context.Context, addr string) (*Client, error) {
|
|||||||
Backoff: backoffConfig,
|
Backoff: backoffConfig,
|
||||||
}
|
}
|
||||||
gopts := []grpc.DialOption{
|
gopts := []grpc.DialOption{
|
||||||
|
//nolint:staticcheck // ignore SA1019: WithBlock is deprecated and does not work with NewClient.
|
||||||
grpc.WithBlock(),
|
grpc.WithBlock(),
|
||||||
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
||||||
grpc.WithConnectParams(connParams),
|
grpc.WithConnectParams(connParams),
|
||||||
@ -37,6 +38,7 @@ func NewClient(ctx context.Context, addr string) (*Client, error) {
|
|||||||
grpc.WithUnaryInterceptor(grpcerrors.UnaryClientInterceptor),
|
grpc.WithUnaryInterceptor(grpcerrors.UnaryClientInterceptor),
|
||||||
grpc.WithStreamInterceptor(grpcerrors.StreamClientInterceptor),
|
grpc.WithStreamInterceptor(grpcerrors.StreamClientInterceptor),
|
||||||
}
|
}
|
||||||
|
//nolint:staticcheck // ignore SA1019: Recommended NewClient has different behavior from DialContext.
|
||||||
conn, err := grpc.DialContext(ctx, dialer.DialAddress(addr), gopts...)
|
conn, err := grpc.DialContext(ctx, dialer.DialAddress(addr), gopts...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -94,7 +96,7 @@ func (c *Client) DisconnectProcess(ctx context.Context, ref, pid string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Invoke(ctx context.Context, ref string, pid string, invokeConfig pb.InvokeConfig, in io.ReadCloser, stdout io.WriteCloser, stderr io.WriteCloser) error {
|
func (c *Client) Invoke(ctx context.Context, ref string, pid string, invokeConfig *pb.InvokeConfig, in io.ReadCloser, stdout io.WriteCloser, stderr io.WriteCloser) error {
|
||||||
if ref == "" || pid == "" {
|
if ref == "" || pid == "" {
|
||||||
return errors.New("build reference must be specified")
|
return errors.New("build reference must be specified")
|
||||||
}
|
}
|
||||||
@ -102,7 +104,7 @@ func (c *Client) Invoke(ctx context.Context, ref string, pid string, invokeConfi
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return attachIO(ctx, stream, &pb.InitMessage{Ref: ref, ProcessID: pid, InvokeConfig: &invokeConfig}, ioAttachConfig{
|
return attachIO(ctx, stream, &pb.InitMessage{Ref: ref, ProcessID: pid, InvokeConfig: invokeConfig}, ioAttachConfig{
|
||||||
stdin: in,
|
stdin: in,
|
||||||
stdout: stdout,
|
stdout: stdout,
|
||||||
stderr: stderr,
|
stderr: stderr,
|
||||||
@ -114,7 +116,7 @@ func (c *Client) Inspect(ctx context.Context, ref string) (*pb.InspectResponse,
|
|||||||
return c.client().Inspect(ctx, &pb.InspectRequest{Ref: ref})
|
return c.client().Inspect(ctx, &pb.InspectRequest{Ref: ref})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Build(ctx context.Context, options pb.BuildOptions, in io.ReadCloser, progress progress.Writer) (string, *client.SolveResponse, *build.Inputs, error) {
|
func (c *Client) Build(ctx context.Context, options *pb.BuildOptions, in io.ReadCloser, progress progress.Writer) (string, *client.SolveResponse, *build.Inputs, error) {
|
||||||
ref := identity.NewID()
|
ref := identity.NewID()
|
||||||
statusChan := make(chan *client.SolveStatus)
|
statusChan := make(chan *client.SolveStatus)
|
||||||
eg, egCtx := errgroup.WithContext(ctx)
|
eg, egCtx := errgroup.WithContext(ctx)
|
||||||
@ -135,7 +137,7 @@ func (c *Client) Build(ctx context.Context, options pb.BuildOptions, in io.ReadC
|
|||||||
return ref, resp, nil, eg.Wait()
|
return ref, resp, nil, eg.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) build(ctx context.Context, ref string, options pb.BuildOptions, in io.ReadCloser, statusChan chan *client.SolveStatus) (*client.SolveResponse, error) {
|
func (c *Client) build(ctx context.Context, ref string, options *pb.BuildOptions, in io.ReadCloser, statusChan chan *client.SolveStatus) (*client.SolveResponse, error) {
|
||||||
eg, egCtx := errgroup.WithContext(ctx)
|
eg, egCtx := errgroup.WithContext(ctx)
|
||||||
done := make(chan struct{})
|
done := make(chan struct{})
|
||||||
|
|
||||||
@ -145,7 +147,7 @@ func (c *Client) build(ctx context.Context, ref string, options pb.BuildOptions,
|
|||||||
defer close(done)
|
defer close(done)
|
||||||
pbResp, err := c.client().Build(egCtx, &pb.BuildRequest{
|
pbResp, err := c.client().Build(egCtx, &pb.BuildRequest{
|
||||||
Ref: ref,
|
Ref: ref,
|
||||||
Options: &options,
|
Options: options,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -149,7 +149,7 @@ func serveCmd(dockerCli command.Cli) *cobra.Command {
|
|||||||
|
|
||||||
// prepare server
|
// prepare server
|
||||||
b := NewServer(func(ctx context.Context, options *controllerapi.BuildOptions, stdin io.Reader, progress progress.Writer) (*client.SolveResponse, *build.ResultHandle, *build.Inputs, error) {
|
b := NewServer(func(ctx context.Context, options *controllerapi.BuildOptions, stdin io.Reader, progress progress.Writer) (*client.SolveResponse, *build.ResultHandle, *build.Inputs, error) {
|
||||||
return cbuild.RunBuild(ctx, dockerCli, *options, stdin, progress, true)
|
return cbuild.RunBuild(ctx, dockerCli, options, stdin, progress, true)
|
||||||
})
|
})
|
||||||
defer b.Close()
|
defer b.Close()
|
||||||
|
|
||||||
|
@ -9,15 +9,16 @@ Remove build cache
|
|||||||
|
|
||||||
### Options
|
### Options
|
||||||
|
|
||||||
| Name | Type | Default | Description |
|
| Name | Type | Default | Description |
|
||||||
|:------------------------|:---------|:--------|:------------------------------------------|
|
|:------------------------|:---------|:--------|:-----------------------------------------------|
|
||||||
| `-a`, `--all` | `bool` | | Include internal/frontend images |
|
| `-a`, `--all` | `bool` | | Include internal/frontend images |
|
||||||
| [`--builder`](#builder) | `string` | | Override the configured builder instance |
|
| [`--builder`](#builder) | `string` | | Override the configured builder instance |
|
||||||
| `-D`, `--debug` | `bool` | | Enable debug logging |
|
| `-D`, `--debug` | `bool` | | Enable debug logging |
|
||||||
| `--filter` | `filter` | | Provide filter values (e.g., `until=24h`) |
|
| `--filter` | `filter` | | Provide filter values (e.g., `until=24h`) |
|
||||||
| `-f`, `--force` | `bool` | | Do not prompt for confirmation |
|
| `-f`, `--force` | `bool` | | Do not prompt for confirmation |
|
||||||
| `--keep-storage` | `bytes` | `0` | Amount of disk space to keep for cache |
|
| `--max-storage` | `bytes` | `0` | Maximum amount of disk space to keep for cache |
|
||||||
| `--verbose` | `bool` | | Provide a more verbose output |
|
| `--min-storage` | `bytes` | `0` | Minimum amount of disk space to keep for cache |
|
||||||
|
| `--verbose` | `bool` | | Provide a more verbose output |
|
||||||
|
|
||||||
|
|
||||||
<!---MARKER_GEN_END-->
|
<!---MARKER_GEN_END-->
|
||||||
|
53
go.mod
53
go.mod
@ -1,6 +1,6 @@
|
|||||||
module github.com/docker/buildx
|
module github.com/docker/buildx
|
||||||
|
|
||||||
go 1.21.0
|
go 1.22.0
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Masterminds/semver/v3 v3.2.1
|
github.com/Masterminds/semver/v3 v3.2.1
|
||||||
@ -8,7 +8,7 @@ require (
|
|||||||
github.com/aws/aws-sdk-go-v2/config v1.26.6
|
github.com/aws/aws-sdk-go-v2/config v1.26.6
|
||||||
github.com/compose-spec/compose-go/v2 v2.2.0
|
github.com/compose-spec/compose-go/v2 v2.2.0
|
||||||
github.com/containerd/console v1.0.4
|
github.com/containerd/console v1.0.4
|
||||||
github.com/containerd/containerd v1.7.21
|
github.com/containerd/containerd v1.7.22
|
||||||
github.com/containerd/continuity v0.4.3
|
github.com/containerd/continuity v0.4.3
|
||||||
github.com/containerd/errdefs v0.1.0
|
github.com/containerd/errdefs v0.1.0
|
||||||
github.com/containerd/log v0.1.0
|
github.com/containerd/log v0.1.0
|
||||||
@ -16,20 +16,18 @@ require (
|
|||||||
github.com/containerd/typeurl/v2 v2.2.0
|
github.com/containerd/typeurl/v2 v2.2.0
|
||||||
github.com/creack/pty v1.1.21
|
github.com/creack/pty v1.1.21
|
||||||
github.com/distribution/reference v0.6.0
|
github.com/distribution/reference v0.6.0
|
||||||
github.com/docker/cli v27.2.1+incompatible
|
github.com/docker/cli v27.3.1+incompatible
|
||||||
github.com/docker/cli-docs-tool v0.8.0
|
github.com/docker/cli-docs-tool v0.8.0
|
||||||
github.com/docker/docker v27.2.1+incompatible
|
github.com/docker/docker v27.3.1+incompatible
|
||||||
github.com/docker/go-units v0.5.0
|
github.com/docker/go-units v0.5.0
|
||||||
github.com/gofrs/flock v0.12.1
|
github.com/gofrs/flock v0.12.1
|
||||||
github.com/gogo/protobuf v1.3.2
|
|
||||||
github.com/golang/protobuf v1.5.4
|
|
||||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
||||||
github.com/google/uuid v1.6.0
|
github.com/google/uuid v1.6.0
|
||||||
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992
|
github.com/hashicorp/go-cty-funcs v0.0.0-20230405223818-a090f58aa992
|
||||||
github.com/hashicorp/hcl/v2 v2.20.1
|
github.com/hashicorp/hcl/v2 v2.20.1
|
||||||
github.com/in-toto/in-toto-golang v0.5.0
|
github.com/in-toto/in-toto-golang v0.5.0
|
||||||
github.com/mitchellh/hashstructure/v2 v2.0.2
|
github.com/mitchellh/hashstructure/v2 v2.0.2
|
||||||
github.com/moby/buildkit v0.16.0
|
github.com/moby/buildkit v0.16.0-rc2.0.20241002204825-8445ccf1cb0b
|
||||||
github.com/moby/sys/mountinfo v0.7.2
|
github.com/moby/sys/mountinfo v0.7.2
|
||||||
github.com/moby/sys/signal v0.7.1
|
github.com/moby/sys/signal v0.7.1
|
||||||
github.com/morikuni/aec v1.0.0
|
github.com/morikuni/aec v1.0.0
|
||||||
@ -42,19 +40,21 @@ require (
|
|||||||
github.com/spf13/cobra v1.8.1
|
github.com/spf13/cobra v1.8.1
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/stretchr/testify v1.9.0
|
github.com/stretchr/testify v1.9.0
|
||||||
github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c
|
github.com/tonistiigi/fsutil v0.0.0-20240926161958-8754824c3c4f
|
||||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4
|
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4
|
||||||
github.com/zclconf/go-cty v1.14.4
|
github.com/zclconf/go-cty v1.14.4
|
||||||
go.opentelemetry.io/otel v1.21.0
|
go.opentelemetry.io/otel v1.21.0
|
||||||
go.opentelemetry.io/otel/metric v1.21.0
|
go.opentelemetry.io/otel/metric v1.21.0
|
||||||
go.opentelemetry.io/otel/sdk v1.21.0
|
go.opentelemetry.io/otel/sdk v1.21.0
|
||||||
go.opentelemetry.io/otel/trace v1.21.0
|
go.opentelemetry.io/otel/trace v1.21.0
|
||||||
golang.org/x/mod v0.17.0
|
golang.org/x/mod v0.21.0
|
||||||
golang.org/x/sync v0.7.0
|
golang.org/x/sync v0.8.0
|
||||||
golang.org/x/sys v0.22.0
|
golang.org/x/sys v0.25.0
|
||||||
golang.org/x/term v0.20.0
|
golang.org/x/term v0.24.0
|
||||||
golang.org/x/text v0.15.0
|
golang.org/x/text v0.18.0
|
||||||
google.golang.org/grpc v1.62.0
|
google.golang.org/grpc v1.66.2
|
||||||
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1
|
||||||
|
google.golang.org/protobuf v1.34.1
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
k8s.io/api v0.29.2
|
k8s.io/api v0.29.2
|
||||||
k8s.io/apimachinery v0.29.2
|
k8s.io/apimachinery v0.29.2
|
||||||
@ -82,7 +82,7 @@ require (
|
|||||||
github.com/aws/smithy-go v1.19.0 // indirect
|
github.com/aws/smithy-go v1.19.0 // indirect
|
||||||
github.com/beorn7/perks v1.0.1 // indirect
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
github.com/cespare/xxhash/v2 v2.3.0 // indirect
|
||||||
github.com/containerd/containerd/api v1.7.19 // indirect
|
github.com/containerd/containerd/api v1.7.19 // indirect
|
||||||
github.com/containerd/ttrpc v1.2.5 // indirect
|
github.com/containerd/ttrpc v1.2.5 // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
||||||
@ -101,7 +101,8 @@ require (
|
|||||||
github.com/go-openapi/jsonreference v0.20.2 // indirect
|
github.com/go-openapi/jsonreference v0.20.2 // indirect
|
||||||
github.com/go-openapi/swag v0.22.3 // indirect
|
github.com/go-openapi/swag v0.22.3 // indirect
|
||||||
github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
|
github.com/go-viper/mapstructure/v2 v2.0.0 // indirect
|
||||||
github.com/gogo/googleapis v1.4.1 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
|
github.com/golang/protobuf v1.5.4 // indirect
|
||||||
github.com/google/gnostic-models v0.6.8 // indirect
|
github.com/google/gnostic-models v0.6.8 // indirect
|
||||||
github.com/google/go-cmp v0.6.0 // indirect
|
github.com/google/go-cmp v0.6.0 // indirect
|
||||||
github.com/google/gofuzz v1.2.0 // indirect
|
github.com/google/gofuzz v1.2.0 // indirect
|
||||||
@ -127,7 +128,7 @@ require (
|
|||||||
github.com/moby/locker v1.0.1 // indirect
|
github.com/moby/locker v1.0.1 // indirect
|
||||||
github.com/moby/patternmatcher v0.6.0 // indirect
|
github.com/moby/patternmatcher v0.6.0 // indirect
|
||||||
github.com/moby/spdystream v0.2.0 // indirect
|
github.com/moby/spdystream v0.2.0 // indirect
|
||||||
github.com/moby/sys/sequential v0.5.0 // indirect
|
github.com/moby/sys/sequential v0.6.0 // indirect
|
||||||
github.com/moby/sys/user v0.3.0 // indirect
|
github.com/moby/sys/user v0.3.0 // indirect
|
||||||
github.com/moby/sys/userns v0.1.0 // indirect
|
github.com/moby/sys/userns v0.1.0 // indirect
|
||||||
github.com/moby/term v0.5.0 // indirect
|
github.com/moby/term v0.5.0 // indirect
|
||||||
@ -160,17 +161,15 @@ require (
|
|||||||
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect
|
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect
|
go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect
|
||||||
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
|
||||||
golang.org/x/crypto v0.23.0 // indirect
|
golang.org/x/crypto v0.27.0 // indirect
|
||||||
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 // indirect
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
|
||||||
golang.org/x/net v0.25.0 // indirect
|
golang.org/x/net v0.29.0 // indirect
|
||||||
golang.org/x/oauth2 v0.16.0 // indirect
|
golang.org/x/oauth2 v0.21.0 // indirect
|
||||||
golang.org/x/time v0.3.0 // indirect
|
golang.org/x/time v0.6.0 // indirect
|
||||||
golang.org/x/tools v0.17.0 // indirect
|
golang.org/x/tools v0.25.0 // indirect
|
||||||
google.golang.org/appengine v1.6.8 // indirect
|
|
||||||
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
|
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 // indirect
|
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 // indirect
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 // indirect
|
||||||
google.golang.org/protobuf v1.33.0 // indirect
|
|
||||||
gopkg.in/inf.v0 v0.9.1 // indirect
|
gopkg.in/inf.v0 v0.9.1 // indirect
|
||||||
gopkg.in/yaml.v2 v2.4.0 // indirect
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
k8s.io/klog/v2 v2.110.1 // indirect
|
k8s.io/klog/v2 v2.110.1 // indirect
|
||||||
|
127
go.sum
127
go.sum
@ -1,8 +1,7 @@
|
|||||||
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
|
||||||
cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
|
cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
|
||||||
cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
|
cloud.google.com/go/compute/metadata v0.3.0 h1:Tz+eQXMEqDIKRsmY3cHTL6FVaynIjX2QxYC4trgAKZc=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
|
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
|
||||||
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
|
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
|
||||||
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
|
||||||
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 h1:59MxjQVfjXsBpLy+dbd2/ELV5ofnUkUZBvWSC85sheA=
|
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 h1:59MxjQVfjXsBpLy+dbd2/ELV5ofnUkUZBvWSC85sheA=
|
||||||
@ -76,12 +75,12 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXe
|
|||||||
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
|
||||||
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
|
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
|
||||||
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e85keuznYcH5rqI438v41pKcBl4ZxQ=
|
||||||
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
|
||||||
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
|
github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b h1:ga8SEFjZ60pxLcmhnThWgvH2wg8376yUJmPhEH4H3kw=
|
||||||
github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
|
github.com/cncf/xds/go v0.0.0-20240423153145-555b57ec207b/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
|
||||||
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
|
||||||
github.com/compose-spec/compose-go/v2 v2.2.0 h1:VsQosGhuO+H9wh5laiIiAe4TVd73kQ5NWwmNrdm0HRA=
|
github.com/compose-spec/compose-go/v2 v2.2.0 h1:VsQosGhuO+H9wh5laiIiAe4TVd73kQ5NWwmNrdm0HRA=
|
||||||
@ -90,8 +89,8 @@ github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaD
|
|||||||
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
|
github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
|
||||||
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
|
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
|
||||||
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
|
||||||
github.com/containerd/containerd v1.7.21 h1:USGXRK1eOC/SX0L195YgxTHb0a00anxajOzgfN0qrCA=
|
github.com/containerd/containerd v1.7.22 h1:nZuNnNRA6T6jB975rx2RRNqqH2k6ELYKDZfqTHqwyy0=
|
||||||
github.com/containerd/containerd v1.7.21/go.mod h1:e3Jz1rYRUZ2Lt51YrH9Rz0zPyJBOlSvB3ghr2jbVD8g=
|
github.com/containerd/containerd v1.7.22/go.mod h1:e3Jz1rYRUZ2Lt51YrH9Rz0zPyJBOlSvB3ghr2jbVD8g=
|
||||||
github.com/containerd/containerd/api v1.7.19 h1:VWbJL+8Ap4Ju2mx9c9qS1uFSB1OVYr5JJrW2yT5vFoA=
|
github.com/containerd/containerd/api v1.7.19 h1:VWbJL+8Ap4Ju2mx9c9qS1uFSB1OVYr5JJrW2yT5vFoA=
|
||||||
github.com/containerd/containerd/api v1.7.19/go.mod h1:fwGavl3LNwAV5ilJ0sbrABL44AQxmNjDRcwheXDb6Ig=
|
github.com/containerd/containerd/api v1.7.19/go.mod h1:fwGavl3LNwAV5ilJ0sbrABL44AQxmNjDRcwheXDb6Ig=
|
||||||
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
|
github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8=
|
||||||
@ -124,15 +123,15 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
|
|||||||
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
github.com/denisenkom/go-mssqldb v0.0.0-20191128021309-1d7a30a10f73/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU=
|
||||||
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
|
||||||
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
|
||||||
github.com/docker/cli v27.2.1+incompatible h1:U5BPtiD0viUzjGAjV1p0MGB8eVA3L3cbIrnyWmSJI70=
|
github.com/docker/cli v27.3.1+incompatible h1:qEGdFBF3Xu6SCvCYhc7CzaQTlBmqDuzxPDpigSyeKQQ=
|
||||||
github.com/docker/cli v27.2.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
github.com/docker/cli v27.3.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||||
github.com/docker/cli-docs-tool v0.8.0 h1:YcDWl7rQJC3lJ7WVZRwSs3bc9nka97QLWfyJQli8yJU=
|
github.com/docker/cli-docs-tool v0.8.0 h1:YcDWl7rQJC3lJ7WVZRwSs3bc9nka97QLWfyJQli8yJU=
|
||||||
github.com/docker/cli-docs-tool v0.8.0/go.mod h1:8TQQ3E7mOXoYUs811LiPdUnAhXrcVsBIrW21a5pUbdk=
|
github.com/docker/cli-docs-tool v0.8.0/go.mod h1:8TQQ3E7mOXoYUs811LiPdUnAhXrcVsBIrW21a5pUbdk=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
|
||||||
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v27.2.1+incompatible h1:fQdiLfW7VLscyoeYEBz7/J8soYFDZV1u6VW6gJEjNMI=
|
github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI=
|
||||||
github.com/docker/docker v27.2.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
|
||||||
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
|
||||||
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0=
|
||||||
@ -186,15 +185,13 @@ github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAp
|
|||||||
github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||||
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
|
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
|
||||||
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
|
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
|
||||||
github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0=
|
|
||||||
github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4=
|
|
||||||
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||||
github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
|
github.com/golang/glog v1.2.1 h1:OptwRhECazUx5ix5TTWC3EZhsZEHWcYWY4FQHTIubm4=
|
||||||
github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
github.com/golang/glog v1.2.1/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
|
||||||
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
@ -202,8 +199,6 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
|
|||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
|
||||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
|
||||||
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
|
||||||
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
|
||||||
github.com/google/certificate-transparency-go v1.0.10-0.20180222191210-5ab67e519c93 h1:jc2UWq7CbdszqeH6qu1ougXMIUBfSy8Pbh/anURYbGI=
|
github.com/google/certificate-transparency-go v1.0.10-0.20180222191210-5ab67e519c93 h1:jc2UWq7CbdszqeH6qu1ougXMIUBfSy8Pbh/anURYbGI=
|
||||||
@ -212,7 +207,6 @@ github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvR
|
|||||||
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
|
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
|
||||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
|
||||||
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
||||||
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||||
@ -307,8 +301,8 @@ github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/z
|
|||||||
github.com/mitchellh/mapstructure v0.0.0-20150613213606-2caf8efc9366/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
github.com/mitchellh/mapstructure v0.0.0-20150613213606-2caf8efc9366/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
|
||||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
|
||||||
github.com/moby/buildkit v0.16.0 h1:wOVBj1o5YNVad/txPQNXUXdelm7Hs/i0PUFjzbK0VKE=
|
github.com/moby/buildkit v0.16.0-rc2.0.20241002204825-8445ccf1cb0b h1:smNXGkzTkYHhDTL8U3ZJZRdUBrofNyiCea8udWy3C5A=
|
||||||
github.com/moby/buildkit v0.16.0/go.mod h1:Xqx/5GlrqE1yIRORk0NSCVDFpQAU1WjlT6KHYZdisIQ=
|
github.com/moby/buildkit v0.16.0-rc2.0.20241002204825-8445ccf1cb0b/go.mod h1:MJXOsHz4qbcmjnfCRjqyZRYu5VnQ4Y6YucZz4tvcRY4=
|
||||||
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
|
||||||
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
|
||||||
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
|
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
|
||||||
@ -319,8 +313,8 @@ github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8
|
|||||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||||
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg=
|
||||||
github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
|
github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4=
|
||||||
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
|
github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
|
||||||
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
|
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
|
||||||
github.com/moby/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0=
|
github.com/moby/sys/signal v0.7.1 h1:PrQxdvxcGijdo6UXXo/lU/TvHUWyPhj7UOpSo8tuvk0=
|
||||||
github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8=
|
github.com/moby/sys/signal v0.7.1/go.mod h1:Se1VGehYokAkrSQwL4tDzHvETwUZlnY7S5XtQ50mQp8=
|
||||||
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
|
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
|
||||||
@ -443,8 +437,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT
|
|||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/theupdateframework/notary v0.7.0 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
|
github.com/theupdateframework/notary v0.7.0 h1:QyagRZ7wlSpjT5N2qQAh/pN+DVqgekv4DzbAiAiEL3c=
|
||||||
github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw=
|
github.com/theupdateframework/notary v0.7.0/go.mod h1:c9DRxcmhHmVLDay4/2fUYdISnHqbFDGRSlXPO0AhYWw=
|
||||||
github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c h1:+6wg/4ORAbnSoGDzg2Q1i3CeMcT/jjhye/ZfnBHy7/M=
|
github.com/tonistiigi/fsutil v0.0.0-20240926161958-8754824c3c4f h1:scejvzjNA30X9ufWPUH/a2MhWg1sQPxeC6N6wm7nWEE=
|
||||||
github.com/tonistiigi/fsutil v0.0.0-20240424095704-91a3fc46842c/go.mod h1:vbbYqJlnswsbJqWUcJN8fKtBhnEgldDrcagTgnBVKKM=
|
github.com/tonistiigi/fsutil v0.0.0-20240926161958-8754824c3c4f/go.mod h1:xnG7rCC28GVN8efEm5ijNp56TnNtrYCv75EtTH42yz4=
|
||||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4 h1:7I5c2Ig/5FgqkYOh/N87NzoyI9U15qUPXhDD8uCupv8=
|
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4 h1:7I5c2Ig/5FgqkYOh/N87NzoyI9U15qUPXhDD8uCupv8=
|
||||||
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4/go.mod h1:278M4p8WsNh3n4a1eqiFcV2FGk7wE5fwUpUom9mK9lE=
|
github.com/tonistiigi/go-csvvalue v0.0.0-20240710180619-ddb21b71c0b4/go.mod h1:278M4p8WsNh3n4a1eqiFcV2FGk7wE5fwUpUom9mK9lE=
|
||||||
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0=
|
github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0=
|
||||||
@ -463,7 +457,6 @@ github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17
|
|||||||
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
|
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
|
||||||
github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
|
github.com/zclconf/go-cty v1.4.0/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ=
|
||||||
github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8=
|
github.com/zclconf/go-cty v1.14.4 h1:uXXczd9QDGsgu0i/QFR/hzI5NYCHLf6NQw/atrbnhq8=
|
||||||
github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
|
github.com/zclconf/go-cty v1.14.4/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE=
|
||||||
@ -509,16 +502,14 @@ golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200422194213-44a606286825/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
|
||||||
golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI=
|
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
|
||||||
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 h1:e66Fs6Z+fZTbFBAxKfP3PALWBtpfqks2bwGcexMxgtk=
|
||||||
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o=
|
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0/go.mod h1:2TbTHSBQa924w8M6Xs1QcRcFwyucIwBGpK1p2f1YFFY=
|
||||||
golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
|
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
@ -526,21 +517,18 @@ golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLL
|
|||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
|
||||||
golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac=
|
golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs=
|
||||||
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
|
golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
|
||||||
golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ=
|
|
||||||
golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
|
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ=
|
||||||
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -550,56 +538,45 @@ golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
|
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
|
||||||
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
|
||||||
golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw=
|
|
||||||
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
|
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
|
||||||
golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
|
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk=
|
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||||
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
|
|
||||||
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
|
||||||
golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc=
|
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
|
||||||
golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps=
|
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
|
|
||||||
google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
|
|
||||||
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
|
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
|
||||||
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
|
google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117 h1:+rdxYoE3E5htTEWIe15GlN6IfvbURM//Jt0mmkmm6ZU=
|
||||||
google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
|
google.golang.org/genproto/googleapis/api v0.0.0-20240604185151-ef581f913117/go.mod h1:OimBR/bc1wPO9iV4NC2bpyjy3VnAwZh5EBPQdtaE5oo=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117 h1:1GBuWVLM/KMVUv1t1En5Gs+gFZCNd360GGb4sSxtrhU=
|
||||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20240604185151-ef581f913117/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0=
|
||||||
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
google.golang.org/grpc v1.0.5/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||||
google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk=
|
google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo=
|
||||||
google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
|
google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y=
|
||||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A=
|
||||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA=
|
||||||
google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
|
google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg=
|
||||||
google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
||||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
gopkg.in/cenkalti/backoff.v2 v2.2.1 h1:eJ9UAg01/HIHG987TwxvnzK2MgxXq97YY6rYDpY9aII=
|
||||||
|
@ -7,10 +7,13 @@
|
|||||||
|
|
||||||
ARG GO_VERSION="1.22"
|
ARG GO_VERSION="1.22"
|
||||||
ARG PROTOC_VERSION="3.11.4"
|
ARG PROTOC_VERSION="3.11.4"
|
||||||
|
ARG PROTOC_GOOGLEAPIS_VERSION=2af421884dd468d565137215c946ebe4e245ae26
|
||||||
|
|
||||||
# protoc is dynamically linked to glibc so can't use alpine base
|
# protoc is dynamically linked to glibc so can't use alpine base
|
||||||
FROM golang:${GO_VERSION}-bookworm AS base
|
FROM golang:${GO_VERSION}-bookworm AS base
|
||||||
RUN apt-get update && apt-get --no-install-recommends install -y git unzip
|
RUN apt-get update && apt-get --no-install-recommends install -y git unzip
|
||||||
|
|
||||||
|
FROM base AS protoc
|
||||||
ARG PROTOC_VERSION
|
ARG PROTOC_VERSION
|
||||||
ARG TARGETOS
|
ARG TARGETOS
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
@ -18,34 +21,57 @@ RUN <<EOT
|
|||||||
set -e
|
set -e
|
||||||
arch=$(echo $TARGETARCH | sed -e s/amd64/x86_64/ -e s/arm64/aarch_64/)
|
arch=$(echo $TARGETARCH | sed -e s/amd64/x86_64/ -e s/arm64/aarch_64/)
|
||||||
wget -q https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip
|
wget -q https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip
|
||||||
unzip protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip -d /usr/local
|
unzip protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip -d /opt/protoc
|
||||||
EOT
|
EOT
|
||||||
WORKDIR /go/src/github.com/docker/buildx
|
|
||||||
|
|
||||||
FROM base AS tools
|
FROM base AS googleapis
|
||||||
RUN --mount=type=bind,target=.,rw \
|
ARG PROTOC_GOOGLEAPIS_VERSION
|
||||||
|
RUN <<EOT
|
||||||
|
set -e
|
||||||
|
wget -q https://github.com/googleapis/googleapis/archive/${PROTOC_GOOGLEAPIS_VERSION}.zip -O googleapis.zip
|
||||||
|
unzip googleapis.zip '*.proto' -d /opt
|
||||||
|
mv /opt/googleapis-${PROTOC_GOOGLEAPIS_VERSION} /opt/googleapis
|
||||||
|
EOT
|
||||||
|
|
||||||
|
FROM base AS protoc-buildkit
|
||||||
|
WORKDIR /app
|
||||||
|
RUN --mount=type=bind,target=/app \
|
||||||
|
--mount=type=cache,target=/root/.cache \
|
||||||
|
--mount=type=cache,target=/go/pkg/mod <<EOT
|
||||||
|
set -e
|
||||||
|
mkdir -p /opt/protoc
|
||||||
|
find vendor -name '*.proto' | tar -cf - --files-from - | tar -C /opt/protoc -xf -
|
||||||
|
EOT
|
||||||
|
|
||||||
|
FROM base AS gobuild-base
|
||||||
|
WORKDIR /go/src
|
||||||
|
COPY --link --from=protoc /opt/protoc /usr/local
|
||||||
|
COPY --link --from=googleapis /opt/googleapis /usr/local/include
|
||||||
|
COPY --link --from=protoc-buildkit /opt/protoc/vendor /usr/local/include
|
||||||
|
|
||||||
|
FROM gobuild-base AS tools
|
||||||
|
RUN --mount=type=bind,source=go.mod,target=/go/src/go.mod,ro \
|
||||||
|
--mount=type=bind,source=go.sum,target=/go/src/go.sum,ro \
|
||||||
--mount=type=cache,target=/root/.cache \
|
--mount=type=cache,target=/root/.cache \
|
||||||
--mount=type=cache,target=/go/pkg/mod \
|
--mount=type=cache,target=/go/pkg/mod \
|
||||||
go install \
|
go install \
|
||||||
github.com/gogo/protobuf/protoc-gen-gogo \
|
google.golang.org/protobuf/cmd/protoc-gen-go \
|
||||||
github.com/gogo/protobuf/protoc-gen-gogofaster \
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc
|
||||||
github.com/gogo/protobuf/protoc-gen-gogoslick \
|
|
||||||
github.com/golang/protobuf/protoc-gen-go
|
|
||||||
|
|
||||||
FROM tools AS generated
|
FROM tools AS generated
|
||||||
RUN --mount=type=bind,target=.,rw <<EOT
|
RUN --mount=type=bind,target=github.com/docker/buildx,ro <<EOT
|
||||||
set -ex
|
set -ex
|
||||||
go generate -mod=vendor -v ./...
|
|
||||||
mkdir /out
|
mkdir /out
|
||||||
git ls-files -m --others -- ':!vendor' '**/*.pb.go' | tar -cf - --files-from - | tar -C /out -xf -
|
find github.com/docker/buildx -name '*.proto' -o -name vendor -prune -false | xargs \
|
||||||
|
protoc --go_out=/out --go-grpc_out=require_unimplemented_servers=false:/out
|
||||||
EOT
|
EOT
|
||||||
|
|
||||||
FROM scratch AS update
|
FROM scratch AS update
|
||||||
COPY --from=generated /out /
|
COPY --from=generated /out/github.com/docker/buildx /
|
||||||
|
|
||||||
FROM base AS validate
|
FROM gobuild-base AS validate
|
||||||
RUN --mount=type=bind,target=.,rw \
|
RUN --mount=type=bind,target=.,rw \
|
||||||
--mount=type=bind,from=generated,source=/out,target=/generated-files <<EOT
|
--mount=type=bind,from=update,target=/generated-files <<EOT
|
||||||
set -e
|
set -e
|
||||||
git add -A
|
git add -A
|
||||||
if [ "$(ls -A /generated-files)" ]; then
|
if [ "$(ls -A /generated-files)" ]; then
|
||||||
|
@ -13,11 +13,11 @@ import (
|
|||||||
type ExecCmd struct {
|
type ExecCmd struct {
|
||||||
m types.Monitor
|
m types.Monitor
|
||||||
|
|
||||||
invokeConfig controllerapi.InvokeConfig
|
invokeConfig *controllerapi.InvokeConfig
|
||||||
stdout io.WriteCloser
|
stdout io.WriteCloser
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewExecCmd(m types.Monitor, invokeConfig controllerapi.InvokeConfig, stdout io.WriteCloser) types.Command {
|
func NewExecCmd(m types.Monitor, invokeConfig *controllerapi.InvokeConfig, stdout io.WriteCloser) types.Command {
|
||||||
return &ExecCmd{m, invokeConfig, stdout}
|
return &ExecCmd{m, invokeConfig, stdout}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ func (cm *ExecCmd) Exec(ctx context.Context, args []string) error {
|
|||||||
if len(args) < 2 {
|
if len(args) < 2 {
|
||||||
return errors.Errorf("command must be passed")
|
return errors.Errorf("command must be passed")
|
||||||
}
|
}
|
||||||
cfg := controllerapi.InvokeConfig{
|
cfg := &controllerapi.InvokeConfig{
|
||||||
Entrypoint: []string{args[1]},
|
Entrypoint: []string{args[1]},
|
||||||
Cmd: args[2:],
|
Cmd: args[2:],
|
||||||
NoCmd: false,
|
NoCmd: false,
|
||||||
|
@ -20,10 +20,10 @@ type ReloadCmd struct {
|
|||||||
progress *progress.Printer
|
progress *progress.Printer
|
||||||
|
|
||||||
options *controllerapi.BuildOptions
|
options *controllerapi.BuildOptions
|
||||||
invokeConfig controllerapi.InvokeConfig
|
invokeConfig *controllerapi.InvokeConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewReloadCmd(m types.Monitor, stdout io.WriteCloser, progress *progress.Printer, options *controllerapi.BuildOptions, invokeConfig controllerapi.InvokeConfig) types.Command {
|
func NewReloadCmd(m types.Monitor, stdout io.WriteCloser, progress *progress.Printer, options *controllerapi.BuildOptions, invokeConfig *controllerapi.InvokeConfig) types.Command {
|
||||||
return &ReloadCmd{m, stdout, progress, options, invokeConfig}
|
return &ReloadCmd{m, stdout, progress, options, invokeConfig}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ func (cm *ReloadCmd) Exec(ctx context.Context, args []string) error {
|
|||||||
}
|
}
|
||||||
var resultUpdated bool
|
var resultUpdated bool
|
||||||
cm.progress.Unpause()
|
cm.progress.Unpause()
|
||||||
ref, _, _, err := cm.m.Build(ctx, *bo, nil, cm.progress) // TODO: support stdin, hold build ref
|
ref, _, _, err := cm.m.Build(ctx, bo, nil, cm.progress) // TODO: support stdin, hold build ref
|
||||||
cm.progress.Pause()
|
cm.progress.Pause()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
var be *controllererrors.BuildError
|
var be *controllererrors.BuildError
|
||||||
|
@ -13,11 +13,11 @@ import (
|
|||||||
type RollbackCmd struct {
|
type RollbackCmd struct {
|
||||||
m types.Monitor
|
m types.Monitor
|
||||||
|
|
||||||
invokeConfig controllerapi.InvokeConfig
|
invokeConfig *controllerapi.InvokeConfig
|
||||||
stdout io.WriteCloser
|
stdout io.WriteCloser
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRollbackCmd(m types.Monitor, invokeConfig controllerapi.InvokeConfig, stdout io.WriteCloser) types.Command {
|
func NewRollbackCmd(m types.Monitor, invokeConfig *controllerapi.InvokeConfig, stdout io.WriteCloser) types.Command {
|
||||||
return &RollbackCmd{m, invokeConfig, stdout}
|
return &RollbackCmd{m, invokeConfig, stdout}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ type MonitorBuildResult struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RunMonitor provides an interactive session for running and managing containers via specified IO.
|
// RunMonitor provides an interactive session for running and managing containers via specified IO.
|
||||||
func RunMonitor(ctx context.Context, curRef string, options *controllerapi.BuildOptions, invokeConfig controllerapi.InvokeConfig, c control.BuildxController, stdin io.ReadCloser, stdout io.WriteCloser, stderr console.File, progress *progress.Printer) (*MonitorBuildResult, error) {
|
func RunMonitor(ctx context.Context, curRef string, options *controllerapi.BuildOptions, invokeConfig *controllerapi.InvokeConfig, c control.BuildxController, stdin io.ReadCloser, stdout io.WriteCloser, stderr console.File, progress *progress.Printer) (*MonitorBuildResult, error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if err := c.Disconnect(ctx, curRef); err != nil {
|
if err := c.Disconnect(ctx, curRef); err != nil {
|
||||||
logrus.Warnf("disconnect error: %v", err)
|
logrus.Warnf("disconnect error: %v", err)
|
||||||
@ -244,7 +244,7 @@ type monitor struct {
|
|||||||
lastBuildResult *MonitorBuildResult
|
lastBuildResult *MonitorBuildResult
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) Build(ctx context.Context, options controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (ref string, resp *client.SolveResponse, input *build.Inputs, err error) {
|
func (m *monitor) Build(ctx context.Context, options *controllerapi.BuildOptions, in io.ReadCloser, progress progress.Writer) (ref string, resp *client.SolveResponse, input *build.Inputs, err error) {
|
||||||
ref, resp, _, err = m.BuildxController.Build(ctx, options, in, progress)
|
ref, resp, _, err = m.BuildxController.Build(ctx, options, in, progress)
|
||||||
m.lastBuildResult = &MonitorBuildResult{Resp: resp, Err: err} // Record build result
|
m.lastBuildResult = &MonitorBuildResult{Resp: resp, Err: err} // Record build result
|
||||||
return
|
return
|
||||||
@ -262,19 +262,19 @@ func (m *monitor) AttachedSessionID() string {
|
|||||||
return m.ref.Load().(string)
|
return m.ref.Load().(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) Rollback(ctx context.Context, cfg controllerapi.InvokeConfig) string {
|
func (m *monitor) Rollback(ctx context.Context, cfg *controllerapi.InvokeConfig) string {
|
||||||
pid := identity.NewID()
|
pid := identity.NewID()
|
||||||
cfg1 := cfg
|
cfg1 := cfg
|
||||||
cfg1.Rollback = true
|
cfg1.Rollback = true
|
||||||
return m.startInvoke(ctx, pid, cfg1)
|
return m.startInvoke(ctx, pid, cfg1)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) Exec(ctx context.Context, cfg controllerapi.InvokeConfig) string {
|
func (m *monitor) Exec(ctx context.Context, cfg *controllerapi.InvokeConfig) string {
|
||||||
return m.startInvoke(ctx, identity.NewID(), cfg)
|
return m.startInvoke(ctx, identity.NewID(), cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) Attach(ctx context.Context, pid string) {
|
func (m *monitor) Attach(ctx context.Context, pid string) {
|
||||||
m.startInvoke(ctx, pid, controllerapi.InvokeConfig{})
|
m.startInvoke(ctx, pid, &controllerapi.InvokeConfig{})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) Detach() {
|
func (m *monitor) Detach() {
|
||||||
@ -291,7 +291,7 @@ func (m *monitor) close() {
|
|||||||
m.Detach()
|
m.Detach()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) startInvoke(ctx context.Context, pid string, cfg controllerapi.InvokeConfig) string {
|
func (m *monitor) startInvoke(ctx context.Context, pid string, cfg *controllerapi.InvokeConfig) string {
|
||||||
if m.invokeCancel != nil {
|
if m.invokeCancel != nil {
|
||||||
m.invokeCancel() // Finish existing attach
|
m.invokeCancel() // Finish existing attach
|
||||||
}
|
}
|
||||||
@ -317,7 +317,7 @@ func (m *monitor) startInvoke(ctx context.Context, pid string, cfg controllerapi
|
|||||||
return pid
|
return pid
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *monitor) invoke(ctx context.Context, pid string, cfg controllerapi.InvokeConfig) error {
|
func (m *monitor) invoke(ctx context.Context, pid string, cfg *controllerapi.InvokeConfig) error {
|
||||||
m.muxIO.Enable(1)
|
m.muxIO.Enable(1)
|
||||||
defer m.muxIO.Disable(1)
|
defer m.muxIO.Disable(1)
|
||||||
if err := m.muxIO.SwitchTo(1); err != nil {
|
if err := m.muxIO.SwitchTo(1); err != nil {
|
||||||
|
@ -12,10 +12,10 @@ type Monitor interface {
|
|||||||
control.BuildxController
|
control.BuildxController
|
||||||
|
|
||||||
// Rollback re-runs the interactive container with initial rootfs contents.
|
// Rollback re-runs the interactive container with initial rootfs contents.
|
||||||
Rollback(ctx context.Context, cfg controllerapi.InvokeConfig) string
|
Rollback(ctx context.Context, cfg *controllerapi.InvokeConfig) string
|
||||||
|
|
||||||
// Rollback executes a process in the interactive container.
|
// Rollback executes a process in the interactive container.
|
||||||
Exec(ctx context.Context, cfg controllerapi.InvokeConfig) string
|
Exec(ctx context.Context, cfg *controllerapi.InvokeConfig) string
|
||||||
|
|
||||||
// Attach attaches IO to a process in the container.
|
// Attach attaches IO to a process in the container.
|
||||||
Attach(ctx context.Context, pid string)
|
Attach(ctx context.Context, pid string)
|
||||||
@ -50,7 +50,6 @@ type CommandInfo struct {
|
|||||||
|
|
||||||
// Command represents a command for debugging.
|
// Command represents a command for debugging.
|
||||||
type Command interface {
|
type Command interface {
|
||||||
|
|
||||||
// Exec executes the command.
|
// Exec executes the command.
|
||||||
Exec(ctx context.Context, args []string) error
|
Exec(ctx context.Context, args []string) error
|
||||||
|
|
||||||
|
@ -9,8 +9,6 @@
|
|||||||
package tools
|
package tools
|
||||||
|
|
||||||
import (
|
import (
|
||||||
_ "github.com/gogo/protobuf/protoc-gen-gogo"
|
_ "google.golang.org/grpc/cmd/protoc-gen-go-grpc"
|
||||||
_ "github.com/gogo/protobuf/protoc-gen-gogofaster"
|
_ "google.golang.org/protobuf/cmd/protoc-gen-go"
|
||||||
_ "github.com/gogo/protobuf/protoc-gen-gogoslick"
|
|
||||||
_ "github.com/golang/protobuf/protoc-gen-go"
|
|
||||||
)
|
)
|
||||||
|
2
vendor/github.com/cespare/xxhash/v2/README.md
generated
vendored
2
vendor/github.com/cespare/xxhash/v2/README.md
generated
vendored
@ -70,3 +70,5 @@ benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$')
|
|||||||
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
|
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
|
||||||
- [FreeCache](https://github.com/coocood/freecache)
|
- [FreeCache](https://github.com/coocood/freecache)
|
||||||
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
|
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
|
||||||
|
- [Ristretto](https://github.com/dgraph-io/ristretto)
|
||||||
|
- [Badger](https://github.com/dgraph-io/badger)
|
||||||
|
29
vendor/github.com/cespare/xxhash/v2/xxhash.go
generated
vendored
29
vendor/github.com/cespare/xxhash/v2/xxhash.go
generated
vendored
@ -19,10 +19,13 @@ const (
|
|||||||
// Store the primes in an array as well.
|
// Store the primes in an array as well.
|
||||||
//
|
//
|
||||||
// The consts are used when possible in Go code to avoid MOVs but we need a
|
// The consts are used when possible in Go code to avoid MOVs but we need a
|
||||||
// contiguous array of the assembly code.
|
// contiguous array for the assembly code.
|
||||||
var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5}
|
var primes = [...]uint64{prime1, prime2, prime3, prime4, prime5}
|
||||||
|
|
||||||
// Digest implements hash.Hash64.
|
// Digest implements hash.Hash64.
|
||||||
|
//
|
||||||
|
// Note that a zero-valued Digest is not ready to receive writes.
|
||||||
|
// Call Reset or create a Digest using New before calling other methods.
|
||||||
type Digest struct {
|
type Digest struct {
|
||||||
v1 uint64
|
v1 uint64
|
||||||
v2 uint64
|
v2 uint64
|
||||||
@ -33,19 +36,31 @@ type Digest struct {
|
|||||||
n int // how much of mem is used
|
n int // how much of mem is used
|
||||||
}
|
}
|
||||||
|
|
||||||
// New creates a new Digest that computes the 64-bit xxHash algorithm.
|
// New creates a new Digest with a zero seed.
|
||||||
func New() *Digest {
|
func New() *Digest {
|
||||||
|
return NewWithSeed(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewWithSeed creates a new Digest with the given seed.
|
||||||
|
func NewWithSeed(seed uint64) *Digest {
|
||||||
var d Digest
|
var d Digest
|
||||||
d.Reset()
|
d.ResetWithSeed(seed)
|
||||||
return &d
|
return &d
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset clears the Digest's state so that it can be reused.
|
// Reset clears the Digest's state so that it can be reused.
|
||||||
|
// It uses a seed value of zero.
|
||||||
func (d *Digest) Reset() {
|
func (d *Digest) Reset() {
|
||||||
d.v1 = primes[0] + prime2
|
d.ResetWithSeed(0)
|
||||||
d.v2 = prime2
|
}
|
||||||
d.v3 = 0
|
|
||||||
d.v4 = -primes[0]
|
// ResetWithSeed clears the Digest's state so that it can be reused.
|
||||||
|
// It uses the given seed to initialize the state.
|
||||||
|
func (d *Digest) ResetWithSeed(seed uint64) {
|
||||||
|
d.v1 = seed + prime1 + prime2
|
||||||
|
d.v2 = seed + prime2
|
||||||
|
d.v3 = seed
|
||||||
|
d.v4 = seed - prime1
|
||||||
d.total = 0
|
d.total = 0
|
||||||
d.n = 0
|
d.n = 0
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/cespare/xxhash/v2/xxhash_asm.go
generated
vendored
2
vendor/github.com/cespare/xxhash/v2/xxhash_asm.go
generated
vendored
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package xxhash
|
package xxhash
|
||||||
|
|
||||||
// Sum64 computes the 64-bit xxHash digest of b.
|
// Sum64 computes the 64-bit xxHash digest of b with a zero seed.
|
||||||
//
|
//
|
||||||
//go:noescape
|
//go:noescape
|
||||||
func Sum64(b []byte) uint64
|
func Sum64(b []byte) uint64
|
||||||
|
2
vendor/github.com/cespare/xxhash/v2/xxhash_other.go
generated
vendored
2
vendor/github.com/cespare/xxhash/v2/xxhash_other.go
generated
vendored
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
package xxhash
|
package xxhash
|
||||||
|
|
||||||
// Sum64 computes the 64-bit xxHash digest of b.
|
// Sum64 computes the 64-bit xxHash digest of b with a zero seed.
|
||||||
func Sum64(b []byte) uint64 {
|
func Sum64(b []byte) uint64 {
|
||||||
// A simpler version would be
|
// A simpler version would be
|
||||||
// d := New()
|
// d := New()
|
||||||
|
2
vendor/github.com/cespare/xxhash/v2/xxhash_safe.go
generated
vendored
2
vendor/github.com/cespare/xxhash/v2/xxhash_safe.go
generated
vendored
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package xxhash
|
package xxhash
|
||||||
|
|
||||||
// Sum64String computes the 64-bit xxHash digest of s.
|
// Sum64String computes the 64-bit xxHash digest of s with a zero seed.
|
||||||
func Sum64String(s string) uint64 {
|
func Sum64String(s string) uint64 {
|
||||||
return Sum64([]byte(s))
|
return Sum64([]byte(s))
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go
generated
vendored
2
vendor/github.com/cespare/xxhash/v2/xxhash_unsafe.go
generated
vendored
@ -33,7 +33,7 @@ import (
|
|||||||
//
|
//
|
||||||
// See https://github.com/golang/go/issues/42739 for discussion.
|
// See https://github.com/golang/go/issues/42739 for discussion.
|
||||||
|
|
||||||
// Sum64String computes the 64-bit xxHash digest of s.
|
// Sum64String computes the 64-bit xxHash digest of s with a zero seed.
|
||||||
// It may be faster than Sum64([]byte(s)) by avoiding a copy.
|
// It may be faster than Sum64([]byte(s)) by avoiding a copy.
|
||||||
func Sum64String(s string) uint64 {
|
func Sum64String(s string) uint64 {
|
||||||
b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))
|
b := *(*[]byte)(unsafe.Pointer(&sliceHeader{s, len(s)}))
|
||||||
|
2
vendor/github.com/containerd/containerd/version/version.go
generated
vendored
2
vendor/github.com/containerd/containerd/version/version.go
generated
vendored
@ -23,7 +23,7 @@ var (
|
|||||||
Package = "github.com/containerd/containerd"
|
Package = "github.com/containerd/containerd"
|
||||||
|
|
||||||
// Version holds the complete version number. Filled in at linking time.
|
// Version holds the complete version number. Filled in at linking time.
|
||||||
Version = "1.7.21+unknown"
|
Version = "1.7.22+unknown"
|
||||||
|
|
||||||
// Revision is filled with the VCS (e.g. git) revision being used to build
|
// Revision is filled with the VCS (e.g. git) revision being used to build
|
||||||
// the program at linking time.
|
// the program at linking time.
|
||||||
|
120
vendor/github.com/docker/cli/cli/command/telemetry_docker.go
generated
vendored
120
vendor/github.com/docker/cli/cli/command/telemetry_docker.go
generated
vendored
@ -5,9 +5,14 @@ package command
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"io/fs"
|
||||||
"net/url"
|
"net/url"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"go.opentelemetry.io/otel"
|
"go.opentelemetry.io/otel"
|
||||||
@ -77,14 +82,7 @@ func dockerExporterOTLPEndpoint(cli Cli) (endpoint string, secure bool) {
|
|||||||
|
|
||||||
switch u.Scheme {
|
switch u.Scheme {
|
||||||
case "unix":
|
case "unix":
|
||||||
// Unix sockets are a bit weird. OTEL seems to imply they
|
endpoint = unixSocketEndpoint(u)
|
||||||
// can be used as an environment variable and are handled properly,
|
|
||||||
// but they don't seem to be as the behavior of the environment variable
|
|
||||||
// is to strip the scheme from the endpoint, but the underlying implementation
|
|
||||||
// needs the scheme to use the correct resolver.
|
|
||||||
//
|
|
||||||
// We'll just handle this in a special way and add the unix:// back to the endpoint.
|
|
||||||
endpoint = "unix://" + path.Join(u.Host, u.Path)
|
|
||||||
case "https":
|
case "https":
|
||||||
secure = true
|
secure = true
|
||||||
fallthrough
|
fallthrough
|
||||||
@ -135,3 +133,109 @@ func dockerMetricExporter(ctx context.Context, cli Cli) []sdkmetric.Option {
|
|||||||
}
|
}
|
||||||
return []sdkmetric.Option{sdkmetric.WithReader(newCLIReader(exp))}
|
return []sdkmetric.Option{sdkmetric.WithReader(newCLIReader(exp))}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// unixSocketEndpoint converts the unix scheme from URL to
|
||||||
|
// an OTEL endpoint that can be used with the OTLP exporter.
|
||||||
|
//
|
||||||
|
// The OTLP exporter handles unix sockets in a strange way.
|
||||||
|
// It seems to imply they can be used as an environment variable
|
||||||
|
// and are handled properly, but they don't seem to be as the behavior
|
||||||
|
// of the environment variable is to strip the scheme from the endpoint
|
||||||
|
// while the underlying implementation needs the scheme to use the
|
||||||
|
// correct resolver.
|
||||||
|
func unixSocketEndpoint(u *url.URL) string {
|
||||||
|
// GRPC does not allow host to be used.
|
||||||
|
socketPath := u.Path
|
||||||
|
|
||||||
|
// If we are on windows and we have an absolute path
|
||||||
|
// that references a letter drive, check to see if the
|
||||||
|
// WSL equivalent path exists and we should use that instead.
|
||||||
|
if isWsl() {
|
||||||
|
if p := wslSocketPath(socketPath, os.DirFS("/")); p != "" {
|
||||||
|
socketPath = p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Enforce that we are using forward slashes.
|
||||||
|
return "unix://" + filepath.ToSlash(socketPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
// wslSocketPath will convert the referenced URL to a WSL-compatible
|
||||||
|
// path and check if that path exists. If the path exists, it will
|
||||||
|
// be returned.
|
||||||
|
func wslSocketPath(s string, f fs.FS) string {
|
||||||
|
if p := toWslPath(s); p != "" {
|
||||||
|
if _, err := stat(p, f); err == nil {
|
||||||
|
return "/" + p
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
// toWslPath converts the referenced URL to a WSL-compatible
|
||||||
|
// path if this looks like a Windows absolute path.
|
||||||
|
//
|
||||||
|
// If no drive is in the URL, defaults to the C drive.
|
||||||
|
func toWslPath(s string) string {
|
||||||
|
drive, p, ok := parseUNCPath(s)
|
||||||
|
if !ok {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("mnt/%s%s", strings.ToLower(drive), p)
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseUNCPath(s string) (drive, p string, ok bool) {
|
||||||
|
// UNC paths use backslashes but we're using forward slashes
|
||||||
|
// so also enforce that here.
|
||||||
|
//
|
||||||
|
// In reality, this should have been enforced much earlier
|
||||||
|
// than here since backslashes aren't allowed in URLs, but
|
||||||
|
// we're going to code defensively here.
|
||||||
|
s = filepath.ToSlash(s)
|
||||||
|
|
||||||
|
const uncPrefix = "//./"
|
||||||
|
if !strings.HasPrefix(s, uncPrefix) {
|
||||||
|
// Not a UNC path.
|
||||||
|
return "", "", false
|
||||||
|
}
|
||||||
|
s = s[len(uncPrefix):]
|
||||||
|
|
||||||
|
parts := strings.SplitN(s, "/", 2)
|
||||||
|
if len(parts) != 2 {
|
||||||
|
// Not enough components.
|
||||||
|
return "", "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
drive, ok = splitWindowsDrive(parts[0])
|
||||||
|
if !ok {
|
||||||
|
// Not a windows drive.
|
||||||
|
return "", "", false
|
||||||
|
}
|
||||||
|
return drive, "/" + parts[1], true
|
||||||
|
}
|
||||||
|
|
||||||
|
// splitWindowsDrive checks if the string references a windows
|
||||||
|
// drive (such as c:) and returns the drive letter if it is.
|
||||||
|
func splitWindowsDrive(s string) (string, bool) {
|
||||||
|
if b := []rune(s); len(b) == 2 && unicode.IsLetter(b[0]) && b[1] == ':' {
|
||||||
|
return string(b[0]), true
|
||||||
|
}
|
||||||
|
return "", false
|
||||||
|
}
|
||||||
|
|
||||||
|
func stat(p string, f fs.FS) (fs.FileInfo, error) {
|
||||||
|
if f, ok := f.(fs.StatFS); ok {
|
||||||
|
return f.Stat(p)
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := f.Open(p)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer file.Close()
|
||||||
|
return file.Stat()
|
||||||
|
}
|
||||||
|
|
||||||
|
func isWsl() bool {
|
||||||
|
return os.Getenv("WSL_DISTRO_NAME") != ""
|
||||||
|
}
|
||||||
|
5
vendor/github.com/docker/cli/cli/command/telemetry_utils.go
generated
vendored
5
vendor/github.com/docker/cli/cli/command/telemetry_utils.go
generated
vendored
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/docker/cli/cli/version"
|
"github.com/docker/cli/cli/version"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
"go.opentelemetry.io/otel"
|
||||||
"go.opentelemetry.io/otel/attribute"
|
"go.opentelemetry.io/otel/attribute"
|
||||||
"go.opentelemetry.io/otel/metric"
|
"go.opentelemetry.io/otel/metric"
|
||||||
)
|
)
|
||||||
@ -94,7 +95,9 @@ func startCobraCommandTimer(mp metric.MeterProvider, attrs []attribute.KeyValue)
|
|||||||
metric.WithAttributes(cmdStatusAttrs...),
|
metric.WithAttributes(cmdStatusAttrs...),
|
||||||
)
|
)
|
||||||
if mp, ok := mp.(MeterProvider); ok {
|
if mp, ok := mp.(MeterProvider); ok {
|
||||||
mp.ForceFlush(ctx)
|
if err := mp.ForceFlush(ctx); err != nil {
|
||||||
|
otel.Handle(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
49
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
49
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
@ -393,7 +393,7 @@ definitions:
|
|||||||
Make the mount non-recursively read-only, but still leave the mount recursive
|
Make the mount non-recursively read-only, but still leave the mount recursive
|
||||||
(unless NonRecursive is set to `true` in conjunction).
|
(unless NonRecursive is set to `true` in conjunction).
|
||||||
|
|
||||||
Addded in v1.44, before that version all read-only mounts were
|
Added in v1.44, before that version all read-only mounts were
|
||||||
non-recursive by default. To match the previous behaviour this
|
non-recursive by default. To match the previous behaviour this
|
||||||
will default to `true` for clients on versions prior to v1.44.
|
will default to `true` for clients on versions prior to v1.44.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
@ -1384,7 +1384,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always empty. It must not be used, and will be removed in API v1.47.
|
> always empty. It must not be used, and will be removed in API v1.48.
|
||||||
type: "string"
|
type: "string"
|
||||||
example: ""
|
example: ""
|
||||||
Domainname:
|
Domainname:
|
||||||
@ -1394,7 +1394,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always empty. It must not be used, and will be removed in API v1.47.
|
> always empty. It must not be used, and will be removed in API v1.48.
|
||||||
type: "string"
|
type: "string"
|
||||||
example: ""
|
example: ""
|
||||||
User:
|
User:
|
||||||
@ -1408,7 +1408,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1419,7 +1419,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1430,7 +1430,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1457,7 +1457,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1468,7 +1468,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1479,7 +1479,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always false. It must not be used, and will be removed in API v1.47.
|
> always false. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1516,7 +1516,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always empty. It must not be used, and will be removed in API v1.47.
|
> always empty. It must not be used, and will be removed in API v1.48.
|
||||||
type: "string"
|
type: "string"
|
||||||
default: ""
|
default: ""
|
||||||
example: ""
|
example: ""
|
||||||
@ -1555,7 +1555,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always omitted. It must not be used, and will be removed in API v1.47.
|
> always omitted. It must not be used, and will be removed in API v1.48.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
example: false
|
example: false
|
||||||
@ -1567,7 +1567,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always omitted. It must not be used, and will be removed in API v1.47.
|
> always omitted. It must not be used, and will be removed in API v1.48.
|
||||||
type: "string"
|
type: "string"
|
||||||
default: ""
|
default: ""
|
||||||
example: ""
|
example: ""
|
||||||
@ -1601,7 +1601,7 @@ definitions:
|
|||||||
<p><br /></p>
|
<p><br /></p>
|
||||||
|
|
||||||
> **Deprecated**: this field is not part of the image specification and is
|
> **Deprecated**: this field is not part of the image specification and is
|
||||||
> always omitted. It must not be used, and will be removed in API v1.47.
|
> always omitted. It must not be used, and will be removed in API v1.48.
|
||||||
type: "integer"
|
type: "integer"
|
||||||
default: 10
|
default: 10
|
||||||
x-nullable: true
|
x-nullable: true
|
||||||
@ -2216,7 +2216,7 @@ definitions:
|
|||||||
Created:
|
Created:
|
||||||
description: |
|
description: |
|
||||||
Date and time at which the image was created as a Unix timestamp
|
Date and time at which the image was created as a Unix timestamp
|
||||||
(number of seconds sinds EPOCH).
|
(number of seconds since EPOCH).
|
||||||
type: "integer"
|
type: "integer"
|
||||||
x-nullable: false
|
x-nullable: false
|
||||||
example: "1644009612"
|
example: "1644009612"
|
||||||
@ -2513,7 +2513,7 @@ definitions:
|
|||||||
example: false
|
example: false
|
||||||
Attachable:
|
Attachable:
|
||||||
description: |
|
description: |
|
||||||
Wheter a global / swarm scope network is manually attachable by regular
|
Whether a global / swarm scope network is manually attachable by regular
|
||||||
containers from workers in swarm mode.
|
containers from workers in swarm mode.
|
||||||
type: "boolean"
|
type: "boolean"
|
||||||
default: false
|
default: false
|
||||||
@ -3736,7 +3736,7 @@ definitions:
|
|||||||
example: "json-file"
|
example: "json-file"
|
||||||
Options:
|
Options:
|
||||||
description: |
|
description: |
|
||||||
Driver-specific options for the selectd log driver, specified
|
Driver-specific options for the selected log driver, specified
|
||||||
as key/value pairs.
|
as key/value pairs.
|
||||||
type: "object"
|
type: "object"
|
||||||
additionalProperties:
|
additionalProperties:
|
||||||
@ -7712,7 +7712,7 @@ paths:
|
|||||||
* Memory usage % = `(used_memory / available_memory) * 100.0`
|
* Memory usage % = `(used_memory / available_memory) * 100.0`
|
||||||
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
|
* cpu_delta = `cpu_stats.cpu_usage.total_usage - precpu_stats.cpu_usage.total_usage`
|
||||||
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
|
* system_cpu_delta = `cpu_stats.system_cpu_usage - precpu_stats.system_cpu_usage`
|
||||||
* number_cpus = `lenght(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
|
* number_cpus = `length(cpu_stats.cpu_usage.percpu_usage)` or `cpu_stats.online_cpus`
|
||||||
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
|
* CPU usage % = `(cpu_delta / system_cpu_delta) * number_cpus * 100.0`
|
||||||
operationId: "ContainerStats"
|
operationId: "ContainerStats"
|
||||||
produces: ["application/json"]
|
produces: ["application/json"]
|
||||||
@ -9226,12 +9226,23 @@ paths:
|
|||||||
parameters:
|
parameters:
|
||||||
- name: "name"
|
- name: "name"
|
||||||
in: "path"
|
in: "path"
|
||||||
description: "Image name or ID."
|
description: |
|
||||||
|
Name of the image to push. For example, `registry.example.com/myimage`.
|
||||||
|
The image must be present in the local image store with the same name.
|
||||||
|
|
||||||
|
The name should be provided without tag; if a tag is provided, it
|
||||||
|
is ignored. For example, `registry.example.com/myimage:latest` is
|
||||||
|
considered equivalent to `registry.example.com/myimage`.
|
||||||
|
|
||||||
|
Use the `tag` parameter to specify the tag to push.
|
||||||
type: "string"
|
type: "string"
|
||||||
required: true
|
required: true
|
||||||
- name: "tag"
|
- name: "tag"
|
||||||
in: "query"
|
in: "query"
|
||||||
description: "The tag to associate with the image on the registry."
|
description: |
|
||||||
|
Tag of the image to push. For example, `latest`. If no tag is provided,
|
||||||
|
all tags of the given image that are present in the local image store
|
||||||
|
are pushed.
|
||||||
type: "string"
|
type: "string"
|
||||||
- name: "X-Registry-Auth"
|
- name: "X-Registry-Auth"
|
||||||
in: "header"
|
in: "header"
|
||||||
|
2
vendor/github.com/docker/docker/api/types/filters/parse.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/filters/parse.go
generated
vendored
@ -196,7 +196,7 @@ func (args Args) Match(field, source string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetBoolOrDefault returns a boolean value of the key if the key is present
|
// GetBoolOrDefault returns a boolean value of the key if the key is present
|
||||||
// and is intepretable as a boolean value. Otherwise the default value is returned.
|
// and is interpretable as a boolean value. Otherwise the default value is returned.
|
||||||
// Error is not nil only if the filter values are not valid boolean or are conflicting.
|
// Error is not nil only if the filter values are not valid boolean or are conflicting.
|
||||||
func (args Args) GetBoolOrDefault(key string, defaultValue bool) (bool, error) {
|
func (args Args) GetBoolOrDefault(key string, defaultValue bool) (bool, error) {
|
||||||
fieldValues, ok := args.fields[key]
|
fieldValues, ok := args.fields[key]
|
||||||
|
2
vendor/github.com/docker/docker/api/types/image/summary.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/image/summary.go
generated
vendored
@ -12,7 +12,7 @@ type Summary struct {
|
|||||||
Containers int64 `json:"Containers"`
|
Containers int64 `json:"Containers"`
|
||||||
|
|
||||||
// Date and time at which the image was created as a Unix timestamp
|
// Date and time at which the image was created as a Unix timestamp
|
||||||
// (number of seconds sinds EPOCH).
|
// (number of seconds since EPOCH).
|
||||||
//
|
//
|
||||||
// Required: true
|
// Required: true
|
||||||
Created int64 `json:"Created"`
|
Created int64 `json:"Created"`
|
||||||
|
2
vendor/github.com/docker/docker/api/types/swarm/swarm.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/swarm/swarm.go
generated
vendored
@ -122,7 +122,7 @@ type CAConfig struct {
|
|||||||
SigningCAKey string `json:",omitempty"`
|
SigningCAKey string `json:",omitempty"`
|
||||||
|
|
||||||
// If this value changes, and there is no specified signing cert and key,
|
// If this value changes, and there is no specified signing cert and key,
|
||||||
// then the swarm is forced to generate a new root certificate ane key.
|
// then the swarm is forced to generate a new root certificate and key.
|
||||||
ForceRotate uint64 `json:",omitempty"`
|
ForceRotate uint64 `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
vendor/github.com/docker/docker/api/types/volume/cluster_volume.go
generated
vendored
2
vendor/github.com/docker/docker/api/types/volume/cluster_volume.go
generated
vendored
@ -414,7 +414,7 @@ type Info struct {
|
|||||||
// the Volume has not been successfully created yet.
|
// the Volume has not been successfully created yet.
|
||||||
VolumeID string `json:",omitempty"`
|
VolumeID string `json:",omitempty"`
|
||||||
|
|
||||||
// AccessibleTopolgoy is the topology this volume is actually accessible
|
// AccessibleTopology is the topology this volume is actually accessible
|
||||||
// from.
|
// from.
|
||||||
AccessibleTopology []Topology `json:",omitempty"`
|
AccessibleTopology []Topology `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/jsonmessage/jsonmessage.go
generated
vendored
@ -290,7 +290,7 @@ func DisplayJSONMessagesStream(in io.Reader, out io.Writer, terminalFd uintptr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Stream is an io.Writer for output with utilities to get the output's file
|
// Stream is an io.Writer for output with utilities to get the output's file
|
||||||
// descriptor and to detect wether it's a terminal.
|
// descriptor and to detect whether it's a terminal.
|
||||||
//
|
//
|
||||||
// it is subset of the streams.Out type in
|
// it is subset of the streams.Out type in
|
||||||
// https://pkg.go.dev/github.com/docker/cli@v20.10.17+incompatible/cli/streams#Out
|
// https://pkg.go.dev/github.com/docker/cli@v20.10.17+incompatible/cli/streams#Out
|
||||||
|
2
vendor/github.com/docker/docker/pkg/pools/pools.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/pools/pools.go
generated
vendored
@ -124,7 +124,7 @@ func (bufPool *BufioWriterPool) Put(b *bufio.Writer) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewWriteCloserWrapper returns a wrapper which puts the bufio.Writer back
|
// NewWriteCloserWrapper returns a wrapper which puts the bufio.Writer back
|
||||||
// into the pool and closes the writer if it's an io.Writecloser.
|
// into the pool and closes the writer if it's an io.WriteCloser.
|
||||||
func (bufPool *BufioWriterPool) NewWriteCloserWrapper(buf *bufio.Writer, w io.Writer) io.WriteCloser {
|
func (bufPool *BufioWriterPool) NewWriteCloserWrapper(buf *bufio.Writer, w io.Writer) io.WriteCloser {
|
||||||
return ioutils.NewWriteCloserWrapper(w, func() error {
|
return ioutils.NewWriteCloserWrapper(w, func() error {
|
||||||
buf.Flush()
|
buf.Flush()
|
||||||
|
2
vendor/github.com/docker/docker/pkg/system/xattrs_linux.go
generated
vendored
2
vendor/github.com/docker/docker/pkg/system/xattrs_linux.go
generated
vendored
@ -6,7 +6,7 @@ import (
|
|||||||
|
|
||||||
// Lgetxattr retrieves the value of the extended attribute identified by attr
|
// Lgetxattr retrieves the value of the extended attribute identified by attr
|
||||||
// and associated with the given path in the file system.
|
// and associated with the given path in the file system.
|
||||||
// It will returns a nil slice and nil error if the xattr is not set.
|
// It returns a nil slice and nil error if the xattr is not set.
|
||||||
func Lgetxattr(path string, attr string) ([]byte, error) {
|
func Lgetxattr(path string, attr string) ([]byte, error) {
|
||||||
sysErr := func(err error) ([]byte, error) {
|
sysErr := func(err error) ([]byte, error) {
|
||||||
return nil, &XattrError{Op: "lgetxattr", Attr: attr, Path: path, Err: err}
|
return nil, &XattrError{Op: "lgetxattr", Attr: attr, Path: path, Err: err}
|
||||||
|
2
vendor/github.com/docker/docker/registry/config.go
generated
vendored
2
vendor/github.com/docker/docker/registry/config.go
generated
vendored
@ -359,7 +359,7 @@ func hasScheme(reposName string) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func validateHostPort(s string) error {
|
func validateHostPort(s string) error {
|
||||||
// Split host and port, and in case s can not be splitted, assume host only
|
// Split host and port, and in case s can not be split, assume host only
|
||||||
host, port, err := net.SplitHostPort(s)
|
host, port, err := net.SplitHostPort(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
host = s
|
host = s
|
||||||
|
203
vendor/github.com/gogo/googleapis/LICENSE
generated
vendored
203
vendor/github.com/gogo/googleapis/LICENSE
generated
vendored
@ -1,203 +0,0 @@
|
|||||||
Apache License
|
|
||||||
Version 2.0, January 2004
|
|
||||||
http://www.apache.org/licenses/
|
|
||||||
|
|
||||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
||||||
|
|
||||||
1. Definitions.
|
|
||||||
|
|
||||||
"License" shall mean the terms and conditions for use, reproduction,
|
|
||||||
and distribution as defined by Sections 1 through 9 of this document.
|
|
||||||
|
|
||||||
"Licensor" shall mean the copyright owner or entity authorized by
|
|
||||||
the copyright owner that is granting the License.
|
|
||||||
|
|
||||||
"Legal Entity" shall mean the union of the acting entity and all
|
|
||||||
other entities that control, are controlled by, or are under common
|
|
||||||
control with that entity. For the purposes of this definition,
|
|
||||||
"control" means (i) the power, direct or indirect, to cause the
|
|
||||||
direction or management of such entity, whether by contract or
|
|
||||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
||||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
||||||
|
|
||||||
"You" (or "Your") shall mean an individual or Legal Entity
|
|
||||||
exercising permissions granted by this License.
|
|
||||||
|
|
||||||
"Source" form shall mean the preferred form for making modifications,
|
|
||||||
including but not limited to software source code, documentation
|
|
||||||
source, and configuration files.
|
|
||||||
|
|
||||||
"Object" form shall mean any form resulting from mechanical
|
|
||||||
transformation or translation of a Source form, including but
|
|
||||||
not limited to compiled object code, generated documentation,
|
|
||||||
and conversions to other media types.
|
|
||||||
|
|
||||||
"Work" shall mean the work of authorship, whether in Source or
|
|
||||||
Object form, made available under the License, as indicated by a
|
|
||||||
copyright notice that is included in or attached to the work
|
|
||||||
(an example is provided in the Appendix below).
|
|
||||||
|
|
||||||
"Derivative Works" shall mean any work, whether in Source or Object
|
|
||||||
form, that is based on (or derived from) the Work and for which the
|
|
||||||
editorial revisions, annotations, elaborations, or other modifications
|
|
||||||
represent, as a whole, an original work of authorship. For the purposes
|
|
||||||
of this License, Derivative Works shall not include works that remain
|
|
||||||
separable from, or merely link (or bind by name) to the interfaces of,
|
|
||||||
the Work and Derivative Works thereof.
|
|
||||||
|
|
||||||
"Contribution" shall mean any work of authorship, including
|
|
||||||
the original version of the Work and any modifications or additions
|
|
||||||
to that Work or Derivative Works thereof, that is intentionally
|
|
||||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
||||||
or by an individual or Legal Entity authorized to submit on behalf of
|
|
||||||
the copyright owner. For the purposes of this definition, "submitted"
|
|
||||||
means any form of electronic, verbal, or written communication sent
|
|
||||||
to the Licensor or its representatives, including but not limited to
|
|
||||||
communication on electronic mailing lists, source code control systems,
|
|
||||||
and issue tracking systems that are managed by, or on behalf of, the
|
|
||||||
Licensor for the purpose of discussing and improving the Work, but
|
|
||||||
excluding communication that is conspicuously marked or otherwise
|
|
||||||
designated in writing by the copyright owner as "Not a Contribution."
|
|
||||||
|
|
||||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
||||||
on behalf of whom a Contribution has been received by Licensor and
|
|
||||||
subsequently incorporated within the Work.
|
|
||||||
|
|
||||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
copyright license to reproduce, prepare Derivative Works of,
|
|
||||||
publicly display, publicly perform, sublicense, and distribute the
|
|
||||||
Work and such Derivative Works in Source or Object form.
|
|
||||||
|
|
||||||
3. Grant of Patent License. Subject to the terms and conditions of
|
|
||||||
this License, each Contributor hereby grants to You a perpetual,
|
|
||||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
||||||
(except as stated in this section) patent license to make, have made,
|
|
||||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
||||||
where such license applies only to those patent claims licensable
|
|
||||||
by such Contributor that are necessarily infringed by their
|
|
||||||
Contribution(s) alone or by combination of their Contribution(s)
|
|
||||||
with the Work to which such Contribution(s) was submitted. If You
|
|
||||||
institute patent litigation against any entity (including a
|
|
||||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
||||||
or a Contribution incorporated within the Work constitutes direct
|
|
||||||
or contributory patent infringement, then any patent licenses
|
|
||||||
granted to You under this License for that Work shall terminate
|
|
||||||
as of the date such litigation is filed.
|
|
||||||
|
|
||||||
4. Redistribution. You may reproduce and distribute copies of the
|
|
||||||
Work or Derivative Works thereof in any medium, with or without
|
|
||||||
modifications, and in Source or Object form, provided that You
|
|
||||||
meet the following conditions:
|
|
||||||
|
|
||||||
(a) You must give any other recipients of the Work or
|
|
||||||
Derivative Works a copy of this License; and
|
|
||||||
|
|
||||||
(b) You must cause any modified files to carry prominent notices
|
|
||||||
stating that You changed the files; and
|
|
||||||
|
|
||||||
(c) You must retain, in the Source form of any Derivative Works
|
|
||||||
that You distribute, all copyright, patent, trademark, and
|
|
||||||
attribution notices from the Source form of the Work,
|
|
||||||
excluding those notices that do not pertain to any part of
|
|
||||||
the Derivative Works; and
|
|
||||||
|
|
||||||
(d) If the Work includes a "NOTICE" text file as part of its
|
|
||||||
distribution, then any Derivative Works that You distribute must
|
|
||||||
include a readable copy of the attribution notices contained
|
|
||||||
within such NOTICE file, excluding those notices that do not
|
|
||||||
pertain to any part of the Derivative Works, in at least one
|
|
||||||
of the following places: within a NOTICE text file distributed
|
|
||||||
as part of the Derivative Works; within the Source form or
|
|
||||||
documentation, if provided along with the Derivative Works; or,
|
|
||||||
within a display generated by the Derivative Works, if and
|
|
||||||
wherever such third-party notices normally appear. The contents
|
|
||||||
of the NOTICE file are for informational purposes only and
|
|
||||||
do not modify the License. You may add Your own attribution
|
|
||||||
notices within Derivative Works that You distribute, alongside
|
|
||||||
or as an addendum to the NOTICE text from the Work, provided
|
|
||||||
that such additional attribution notices cannot be construed
|
|
||||||
as modifying the License.
|
|
||||||
|
|
||||||
You may add Your own copyright statement to Your modifications and
|
|
||||||
may provide additional or different license terms and conditions
|
|
||||||
for use, reproduction, or distribution of Your modifications, or
|
|
||||||
for any such Derivative Works as a whole, provided Your use,
|
|
||||||
reproduction, and distribution of the Work otherwise complies with
|
|
||||||
the conditions stated in this License.
|
|
||||||
|
|
||||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
||||||
any Contribution intentionally submitted for inclusion in the Work
|
|
||||||
by You to the Licensor shall be under the terms and conditions of
|
|
||||||
this License, without any additional terms or conditions.
|
|
||||||
Notwithstanding the above, nothing herein shall supersede or modify
|
|
||||||
the terms of any separate license agreement you may have executed
|
|
||||||
with Licensor regarding such Contributions.
|
|
||||||
|
|
||||||
6. Trademarks. This License does not grant permission to use the trade
|
|
||||||
names, trademarks, service marks, or product names of the Licensor,
|
|
||||||
except as required for reasonable and customary use in describing the
|
|
||||||
origin of the Work and reproducing the content of the NOTICE file.
|
|
||||||
|
|
||||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
||||||
agreed to in writing, Licensor provides the Work (and each
|
|
||||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
||||||
implied, including, without limitation, any warranties or conditions
|
|
||||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
||||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
||||||
appropriateness of using or redistributing the Work and assume any
|
|
||||||
risks associated with Your exercise of permissions under this License.
|
|
||||||
|
|
||||||
8. Limitation of Liability. In no event and under no legal theory,
|
|
||||||
whether in tort (including negligence), contract, or otherwise,
|
|
||||||
unless required by applicable law (such as deliberate and grossly
|
|
||||||
negligent acts) or agreed to in writing, shall any Contributor be
|
|
||||||
liable to You for damages, including any direct, indirect, special,
|
|
||||||
incidental, or consequential damages of any character arising as a
|
|
||||||
result of this License or out of the use or inability to use the
|
|
||||||
Work (including but not limited to damages for loss of goodwill,
|
|
||||||
work stoppage, computer failure or malfunction, or any and all
|
|
||||||
other commercial damages or losses), even if such Contributor
|
|
||||||
has been advised of the possibility of such damages.
|
|
||||||
|
|
||||||
9. Accepting Warranty or Additional Liability. While redistributing
|
|
||||||
the Work or Derivative Works thereof, You may choose to offer,
|
|
||||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
||||||
or other liability obligations and/or rights consistent with this
|
|
||||||
License. However, in accepting such obligations, You may act only
|
|
||||||
on Your own behalf and on Your sole responsibility, not on behalf
|
|
||||||
of any other Contributor, and only if You agree to indemnify,
|
|
||||||
defend, and hold each Contributor harmless for any liability
|
|
||||||
incurred by, or claims asserted against, such Contributor by reason
|
|
||||||
of your accepting any such warranty or additional liability.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
APPENDIX: How to apply the Apache License to your work.
|
|
||||||
|
|
||||||
To apply the Apache License to your work, attach the following
|
|
||||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
|
||||||
replaced with your own identifying information. (Don't include
|
|
||||||
the brackets!) The text should be enclosed in the appropriate
|
|
||||||
comment syntax for the file format. We also recommend that a
|
|
||||||
file or class name and description of purpose be included on the
|
|
||||||
same "printed page" as the copyright notice for easier
|
|
||||||
identification within third-party archives.
|
|
||||||
|
|
||||||
Copyright 2015, Google Inc
|
|
||||||
Copyright 2018, GoGo 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.
|
|
||||||
|
|
258
vendor/github.com/gogo/googleapis/google/rpc/code.pb.go
generated
vendored
258
vendor/github.com/gogo/googleapis/google/rpc/code.pb.go
generated
vendored
@ -1,258 +0,0 @@
|
|||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
|
||||||
// source: google/rpc/code.proto
|
|
||||||
|
|
||||||
package rpc
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/gogo/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
strconv "strconv"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// The canonical error codes for gRPC APIs.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Sometimes multiple error codes may apply. Services should return
|
|
||||||
// the most specific error code that applies. For example, prefer
|
|
||||||
// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
|
|
||||||
// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
|
|
||||||
type Code int32
|
|
||||||
|
|
||||||
const (
|
|
||||||
// Not an error; returned on success
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 200 OK
|
|
||||||
OK Code = 0
|
|
||||||
// The operation was cancelled, typically by the caller.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 499 Client Closed Request
|
|
||||||
CANCELLED Code = 1
|
|
||||||
// Unknown error. For example, this error may be returned when
|
|
||||||
// a `Status` value received from another address space belongs to
|
|
||||||
// an error space that is not known in this address space. Also
|
|
||||||
// errors raised by APIs that do not return enough error information
|
|
||||||
// may be converted to this error.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
UNKNOWN Code = 2
|
|
||||||
// The client specified an invalid argument. Note that this differs
|
|
||||||
// from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments
|
|
||||||
// that are problematic regardless of the state of the system
|
|
||||||
// (e.g., a malformed file name).
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
INVALID_ARGUMENT Code = 3
|
|
||||||
// The deadline expired before the operation could complete. For operations
|
|
||||||
// that change the state of the system, this error may be returned
|
|
||||||
// even if the operation has completed successfully. For example, a
|
|
||||||
// successful response from a server could have been delayed long
|
|
||||||
// enough for the deadline to expire.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 504 Gateway Timeout
|
|
||||||
DEADLINE_EXCEEDED Code = 4
|
|
||||||
// Some requested entity (e.g., file or directory) was not found.
|
|
||||||
//
|
|
||||||
// Note to server developers: if a request is denied for an entire class
|
|
||||||
// of users, such as gradual feature rollout or undocumented whitelist,
|
|
||||||
// `NOT_FOUND` may be used. If a request is denied for some users within
|
|
||||||
// a class of users, such as user-based access control, `PERMISSION_DENIED`
|
|
||||||
// must be used.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 404 Not Found
|
|
||||||
NOT_FOUND Code = 5
|
|
||||||
// The entity that a client attempted to create (e.g., file or directory)
|
|
||||||
// already exists.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 409 Conflict
|
|
||||||
ALREADY_EXISTS Code = 6
|
|
||||||
// The caller does not have permission to execute the specified
|
|
||||||
// operation. `PERMISSION_DENIED` must not be used for rejections
|
|
||||||
// caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
|
|
||||||
// instead for those errors). `PERMISSION_DENIED` must not be
|
|
||||||
// used if the caller can not be identified (use `UNAUTHENTICATED`
|
|
||||||
// instead for those errors). This error code does not imply the
|
|
||||||
// request is valid or the requested entity exists or satisfies
|
|
||||||
// other pre-conditions.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 403 Forbidden
|
|
||||||
PERMISSION_DENIED Code = 7
|
|
||||||
// The request does not have valid authentication credentials for the
|
|
||||||
// operation.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 401 Unauthorized
|
|
||||||
UNAUTHENTICATED Code = 16
|
|
||||||
// Some resource has been exhausted, perhaps a per-user quota, or
|
|
||||||
// perhaps the entire file system is out of space.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 429 Too Many Requests
|
|
||||||
RESOURCE_EXHAUSTED Code = 8
|
|
||||||
// The operation was rejected because the system is not in a state
|
|
||||||
// required for the operation's execution. For example, the directory
|
|
||||||
// to be deleted is non-empty, an rmdir operation is applied to
|
|
||||||
// a non-directory, etc.
|
|
||||||
//
|
|
||||||
// Service implementors can use the following guidelines to decide
|
|
||||||
// between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
|
|
||||||
// (a) Use `UNAVAILABLE` if the client can retry just the failing call.
|
|
||||||
// (b) Use `ABORTED` if the client should retry at a higher level
|
|
||||||
// (e.g., when a client-specified test-and-set fails, indicating the
|
|
||||||
// client should restart a read-modify-write sequence).
|
|
||||||
// (c) Use `FAILED_PRECONDITION` if the client should not retry until
|
|
||||||
// the system state has been explicitly fixed. E.g., if an "rmdir"
|
|
||||||
// fails because the directory is non-empty, `FAILED_PRECONDITION`
|
|
||||||
// should be returned since the client should not retry unless
|
|
||||||
// the files are deleted from the directory.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
FAILED_PRECONDITION Code = 9
|
|
||||||
// The operation was aborted, typically due to a concurrency issue such as
|
|
||||||
// a sequencer check failure or transaction abort.
|
|
||||||
//
|
|
||||||
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
|
|
||||||
// `ABORTED`, and `UNAVAILABLE`.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 409 Conflict
|
|
||||||
ABORTED Code = 10
|
|
||||||
// The operation was attempted past the valid range. E.g., seeking or
|
|
||||||
// reading past end-of-file.
|
|
||||||
//
|
|
||||||
// Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
|
|
||||||
// be fixed if the system state changes. For example, a 32-bit file
|
|
||||||
// system will generate `INVALID_ARGUMENT` if asked to read at an
|
|
||||||
// offset that is not in the range [0,2^32-1], but it will generate
|
|
||||||
// `OUT_OF_RANGE` if asked to read from an offset past the current
|
|
||||||
// file size.
|
|
||||||
//
|
|
||||||
// There is a fair bit of overlap between `FAILED_PRECONDITION` and
|
|
||||||
// `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific
|
|
||||||
// error) when it applies so that callers who are iterating through
|
|
||||||
// a space can easily look for an `OUT_OF_RANGE` error to detect when
|
|
||||||
// they are done.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
OUT_OF_RANGE Code = 11
|
|
||||||
// The operation is not implemented or is not supported/enabled in this
|
|
||||||
// service.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 501 Not Implemented
|
|
||||||
UNIMPLEMENTED Code = 12
|
|
||||||
// Internal errors. This means that some invariants expected by the
|
|
||||||
// underlying system have been broken. This error code is reserved
|
|
||||||
// for serious errors.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
INTERNAL Code = 13
|
|
||||||
// The service is currently unavailable. This is most likely a
|
|
||||||
// transient condition, which can be corrected by retrying with
|
|
||||||
// a backoff. Note that it is not always safe to retry
|
|
||||||
// non-idempotent operations.
|
|
||||||
//
|
|
||||||
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
|
|
||||||
// `ABORTED`, and `UNAVAILABLE`.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 503 Service Unavailable
|
|
||||||
UNAVAILABLE Code = 14
|
|
||||||
// Unrecoverable data loss or corruption.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
DATA_LOSS Code = 15
|
|
||||||
)
|
|
||||||
|
|
||||||
var Code_name = map[int32]string{
|
|
||||||
0: "OK",
|
|
||||||
1: "CANCELLED",
|
|
||||||
2: "UNKNOWN",
|
|
||||||
3: "INVALID_ARGUMENT",
|
|
||||||
4: "DEADLINE_EXCEEDED",
|
|
||||||
5: "NOT_FOUND",
|
|
||||||
6: "ALREADY_EXISTS",
|
|
||||||
7: "PERMISSION_DENIED",
|
|
||||||
16: "UNAUTHENTICATED",
|
|
||||||
8: "RESOURCE_EXHAUSTED",
|
|
||||||
9: "FAILED_PRECONDITION",
|
|
||||||
10: "ABORTED",
|
|
||||||
11: "OUT_OF_RANGE",
|
|
||||||
12: "UNIMPLEMENTED",
|
|
||||||
13: "INTERNAL",
|
|
||||||
14: "UNAVAILABLE",
|
|
||||||
15: "DATA_LOSS",
|
|
||||||
}
|
|
||||||
|
|
||||||
var Code_value = map[string]int32{
|
|
||||||
"OK": 0,
|
|
||||||
"CANCELLED": 1,
|
|
||||||
"UNKNOWN": 2,
|
|
||||||
"INVALID_ARGUMENT": 3,
|
|
||||||
"DEADLINE_EXCEEDED": 4,
|
|
||||||
"NOT_FOUND": 5,
|
|
||||||
"ALREADY_EXISTS": 6,
|
|
||||||
"PERMISSION_DENIED": 7,
|
|
||||||
"UNAUTHENTICATED": 16,
|
|
||||||
"RESOURCE_EXHAUSTED": 8,
|
|
||||||
"FAILED_PRECONDITION": 9,
|
|
||||||
"ABORTED": 10,
|
|
||||||
"OUT_OF_RANGE": 11,
|
|
||||||
"UNIMPLEMENTED": 12,
|
|
||||||
"INTERNAL": 13,
|
|
||||||
"UNAVAILABLE": 14,
|
|
||||||
"DATA_LOSS": 15,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (Code) EnumDescriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_fe593a732623ccf0, []int{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterEnum("google.rpc.Code", Code_name, Code_value)
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("google/rpc/code.proto", fileDescriptor_fe593a732623ccf0) }
|
|
||||||
|
|
||||||
var fileDescriptor_fe593a732623ccf0 = []byte{
|
|
||||||
// 393 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x44, 0x91, 0x3d, 0x6e, 0x13, 0x41,
|
|
||||||
0x14, 0xc7, 0x3d, 0x76, 0x70, 0xe2, 0xf1, 0xd7, 0xcb, 0x84, 0x40, 0x37, 0x07, 0xa0, 0x70, 0x0a,
|
|
||||||
0x4e, 0xf0, 0xbc, 0xf3, 0x9c, 0x8c, 0x32, 0x7e, 0xb3, 0x9a, 0x9d, 0x09, 0x01, 0x21, 0xad, 0xc4,
|
|
||||||
0xc6, 0x4a, 0x03, 0x5a, 0xcb, 0xe2, 0x00, 0x9c, 0x85, 0x8a, 0x1b, 0x70, 0x85, 0x94, 0x29, 0x29,
|
|
||||||
0xf1, 0xa6, 0xa1, 0x74, 0x49, 0x89, 0x06, 0x0a, 0xda, 0x9f, 0xde, 0xc7, 0xff, 0x43, 0x9e, 0xdf,
|
|
||||||
0xb7, 0xed, 0xfd, 0xc7, 0xcd, 0xc5, 0x6e, 0xdb, 0x5c, 0x34, 0xed, 0xdd, 0x66, 0xb1, 0xdd, 0xb5,
|
|
||||||
0x9f, 0x5b, 0x25, 0xff, 0xe1, 0xc5, 0x6e, 0xdb, 0xbc, 0xfa, 0xde, 0x97, 0x47, 0x45, 0x7b, 0xb7,
|
|
||||||
0x51, 0x43, 0xd9, 0xf7, 0xd7, 0xd0, 0x53, 0x53, 0x39, 0x2a, 0x90, 0x0b, 0x72, 0x8e, 0x0c, 0x08,
|
|
||||||
0x35, 0x96, 0xc7, 0x89, 0xaf, 0xd9, 0xbf, 0x61, 0xe8, 0xab, 0xe7, 0x12, 0x2c, 0xdf, 0xa0, 0xb3,
|
|
||||||
0xa6, 0xc6, 0x70, 0x99, 0xd6, 0xc4, 0x11, 0x06, 0xea, 0x5c, 0x9e, 0x1a, 0x42, 0xe3, 0x2c, 0x53,
|
|
||||||
0x4d, 0xb7, 0x05, 0x91, 0x21, 0x03, 0x47, 0xf9, 0x10, 0xfb, 0x58, 0xaf, 0x7c, 0x62, 0x03, 0xcf,
|
|
||||||
0x94, 0x92, 0x33, 0x74, 0x81, 0xd0, 0xbc, 0xad, 0xe9, 0xd6, 0x56, 0xb1, 0x82, 0x61, 0xde, 0x2c,
|
|
||||||
0x29, 0xac, 0x6d, 0x55, 0x59, 0xcf, 0xb5, 0x21, 0xb6, 0x64, 0xe0, 0x58, 0x9d, 0xc9, 0x79, 0x62,
|
|
||||||
0x4c, 0xf1, 0x8a, 0x38, 0xda, 0x02, 0x23, 0x19, 0x00, 0xf5, 0x42, 0xaa, 0x40, 0x95, 0x4f, 0xa1,
|
|
||||||
0xc8, 0x5f, 0xae, 0x30, 0x55, 0x99, 0x9f, 0xa8, 0x97, 0xf2, 0x6c, 0x85, 0xd6, 0x91, 0xa9, 0xcb,
|
|
||||||
0x40, 0x85, 0x67, 0x63, 0xa3, 0xf5, 0x0c, 0xa3, 0xac, 0x1c, 0x97, 0x3e, 0xe4, 0x29, 0xa9, 0x40,
|
|
||||||
0x4e, 0x7c, 0x8a, 0xb5, 0x5f, 0xd5, 0x01, 0xf9, 0x92, 0x60, 0xac, 0x4e, 0xe5, 0x34, 0xb1, 0x5d,
|
|
||||||
0x97, 0x8e, 0xb2, 0x0d, 0x32, 0x30, 0x51, 0x13, 0x79, 0x62, 0x39, 0x52, 0x60, 0x74, 0x30, 0x55,
|
|
||||||
0x73, 0x39, 0x4e, 0x8c, 0x37, 0x68, 0x1d, 0x2e, 0x1d, 0xc1, 0x2c, 0x1b, 0x32, 0x18, 0xb1, 0x76,
|
|
||||||
0xbe, 0xaa, 0x60, 0xbe, 0x7c, 0xff, 0xb8, 0xd7, 0xbd, 0x1f, 0x7b, 0xdd, 0x3b, 0xec, 0xb5, 0xf8,
|
|
||||||
0xbd, 0xd7, 0xe2, 0x4b, 0xa7, 0xc5, 0xb7, 0x4e, 0x8b, 0x87, 0x4e, 0x8b, 0xc7, 0x4e, 0x8b, 0x9f,
|
|
||||||
0x9d, 0x16, 0xbf, 0x3a, 0xdd, 0x3b, 0x64, 0xfe, 0xa4, 0xc5, 0xc3, 0x93, 0x16, 0x72, 0xd6, 0xb4,
|
|
||||||
0x9f, 0x16, 0xff, 0xf3, 0x5f, 0x8e, 0x72, 0xf8, 0x65, 0xae, 0xa5, 0x14, 0xef, 0x06, 0xbb, 0x6d,
|
|
||||||
0xf3, 0xb5, 0x3f, 0x08, 0x65, 0xf1, 0x61, 0xf8, 0xb7, 0xaa, 0xd7, 0x7f, 0x02, 0x00, 0x00, 0xff,
|
|
||||||
0xff, 0x03, 0xd4, 0x27, 0xff, 0xc3, 0x01, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x Code) String() string {
|
|
||||||
s, ok := Code_name[int32(x)]
|
|
||||||
if ok {
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
return strconv.Itoa(int(x))
|
|
||||||
}
|
|
186
vendor/github.com/gogo/googleapis/google/rpc/code.proto
generated
vendored
186
vendor/github.com/gogo/googleapis/google/rpc/code.proto
generated
vendored
@ -1,186 +0,0 @@
|
|||||||
// Copyright 2020 Google LLC
|
|
||||||
//
|
|
||||||
// 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.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.rpc;
|
|
||||||
|
|
||||||
option go_package = "rpc";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option java_outer_classname = "CodeProto";
|
|
||||||
option java_package = "com.google.rpc";
|
|
||||||
option objc_class_prefix = "RPC";
|
|
||||||
|
|
||||||
// The canonical error codes for gRPC APIs.
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Sometimes multiple error codes may apply. Services should return
|
|
||||||
// the most specific error code that applies. For example, prefer
|
|
||||||
// `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
|
|
||||||
// Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
|
|
||||||
enum Code {
|
|
||||||
// Not an error; returned on success
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 200 OK
|
|
||||||
OK = 0;
|
|
||||||
|
|
||||||
// The operation was cancelled, typically by the caller.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 499 Client Closed Request
|
|
||||||
CANCELLED = 1;
|
|
||||||
|
|
||||||
// Unknown error. For example, this error may be returned when
|
|
||||||
// a `Status` value received from another address space belongs to
|
|
||||||
// an error space that is not known in this address space. Also
|
|
||||||
// errors raised by APIs that do not return enough error information
|
|
||||||
// may be converted to this error.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
UNKNOWN = 2;
|
|
||||||
|
|
||||||
// The client specified an invalid argument. Note that this differs
|
|
||||||
// from `FAILED_PRECONDITION`. `INVALID_ARGUMENT` indicates arguments
|
|
||||||
// that are problematic regardless of the state of the system
|
|
||||||
// (e.g., a malformed file name).
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
INVALID_ARGUMENT = 3;
|
|
||||||
|
|
||||||
// The deadline expired before the operation could complete. For operations
|
|
||||||
// that change the state of the system, this error may be returned
|
|
||||||
// even if the operation has completed successfully. For example, a
|
|
||||||
// successful response from a server could have been delayed long
|
|
||||||
// enough for the deadline to expire.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 504 Gateway Timeout
|
|
||||||
DEADLINE_EXCEEDED = 4;
|
|
||||||
|
|
||||||
// Some requested entity (e.g., file or directory) was not found.
|
|
||||||
//
|
|
||||||
// Note to server developers: if a request is denied for an entire class
|
|
||||||
// of users, such as gradual feature rollout or undocumented whitelist,
|
|
||||||
// `NOT_FOUND` may be used. If a request is denied for some users within
|
|
||||||
// a class of users, such as user-based access control, `PERMISSION_DENIED`
|
|
||||||
// must be used.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 404 Not Found
|
|
||||||
NOT_FOUND = 5;
|
|
||||||
|
|
||||||
// The entity that a client attempted to create (e.g., file or directory)
|
|
||||||
// already exists.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 409 Conflict
|
|
||||||
ALREADY_EXISTS = 6;
|
|
||||||
|
|
||||||
// The caller does not have permission to execute the specified
|
|
||||||
// operation. `PERMISSION_DENIED` must not be used for rejections
|
|
||||||
// caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
|
|
||||||
// instead for those errors). `PERMISSION_DENIED` must not be
|
|
||||||
// used if the caller can not be identified (use `UNAUTHENTICATED`
|
|
||||||
// instead for those errors). This error code does not imply the
|
|
||||||
// request is valid or the requested entity exists or satisfies
|
|
||||||
// other pre-conditions.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 403 Forbidden
|
|
||||||
PERMISSION_DENIED = 7;
|
|
||||||
|
|
||||||
// The request does not have valid authentication credentials for the
|
|
||||||
// operation.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 401 Unauthorized
|
|
||||||
UNAUTHENTICATED = 16;
|
|
||||||
|
|
||||||
// Some resource has been exhausted, perhaps a per-user quota, or
|
|
||||||
// perhaps the entire file system is out of space.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 429 Too Many Requests
|
|
||||||
RESOURCE_EXHAUSTED = 8;
|
|
||||||
|
|
||||||
// The operation was rejected because the system is not in a state
|
|
||||||
// required for the operation's execution. For example, the directory
|
|
||||||
// to be deleted is non-empty, an rmdir operation is applied to
|
|
||||||
// a non-directory, etc.
|
|
||||||
//
|
|
||||||
// Service implementors can use the following guidelines to decide
|
|
||||||
// between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
|
|
||||||
// (a) Use `UNAVAILABLE` if the client can retry just the failing call.
|
|
||||||
// (b) Use `ABORTED` if the client should retry at a higher level
|
|
||||||
// (e.g., when a client-specified test-and-set fails, indicating the
|
|
||||||
// client should restart a read-modify-write sequence).
|
|
||||||
// (c) Use `FAILED_PRECONDITION` if the client should not retry until
|
|
||||||
// the system state has been explicitly fixed. E.g., if an "rmdir"
|
|
||||||
// fails because the directory is non-empty, `FAILED_PRECONDITION`
|
|
||||||
// should be returned since the client should not retry unless
|
|
||||||
// the files are deleted from the directory.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
FAILED_PRECONDITION = 9;
|
|
||||||
|
|
||||||
// The operation was aborted, typically due to a concurrency issue such as
|
|
||||||
// a sequencer check failure or transaction abort.
|
|
||||||
//
|
|
||||||
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
|
|
||||||
// `ABORTED`, and `UNAVAILABLE`.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 409 Conflict
|
|
||||||
ABORTED = 10;
|
|
||||||
|
|
||||||
// The operation was attempted past the valid range. E.g., seeking or
|
|
||||||
// reading past end-of-file.
|
|
||||||
//
|
|
||||||
// Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
|
|
||||||
// be fixed if the system state changes. For example, a 32-bit file
|
|
||||||
// system will generate `INVALID_ARGUMENT` if asked to read at an
|
|
||||||
// offset that is not in the range [0,2^32-1], but it will generate
|
|
||||||
// `OUT_OF_RANGE` if asked to read from an offset past the current
|
|
||||||
// file size.
|
|
||||||
//
|
|
||||||
// There is a fair bit of overlap between `FAILED_PRECONDITION` and
|
|
||||||
// `OUT_OF_RANGE`. We recommend using `OUT_OF_RANGE` (the more specific
|
|
||||||
// error) when it applies so that callers who are iterating through
|
|
||||||
// a space can easily look for an `OUT_OF_RANGE` error to detect when
|
|
||||||
// they are done.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 400 Bad Request
|
|
||||||
OUT_OF_RANGE = 11;
|
|
||||||
|
|
||||||
// The operation is not implemented or is not supported/enabled in this
|
|
||||||
// service.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 501 Not Implemented
|
|
||||||
UNIMPLEMENTED = 12;
|
|
||||||
|
|
||||||
// Internal errors. This means that some invariants expected by the
|
|
||||||
// underlying system have been broken. This error code is reserved
|
|
||||||
// for serious errors.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
INTERNAL = 13;
|
|
||||||
|
|
||||||
// The service is currently unavailable. This is most likely a
|
|
||||||
// transient condition, which can be corrected by retrying with
|
|
||||||
// a backoff. Note that it is not always safe to retry
|
|
||||||
// non-idempotent operations.
|
|
||||||
//
|
|
||||||
// See the guidelines above for deciding between `FAILED_PRECONDITION`,
|
|
||||||
// `ABORTED`, and `UNAVAILABLE`.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 503 Service Unavailable
|
|
||||||
UNAVAILABLE = 14;
|
|
||||||
|
|
||||||
// Unrecoverable data loss or corruption.
|
|
||||||
//
|
|
||||||
// HTTP Mapping: 500 Internal Server Error
|
|
||||||
DATA_LOSS = 15;
|
|
||||||
}
|
|
5472
vendor/github.com/gogo/googleapis/google/rpc/error_details.pb.go
generated
vendored
5472
vendor/github.com/gogo/googleapis/google/rpc/error_details.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
249
vendor/github.com/gogo/googleapis/google/rpc/error_details.proto
generated
vendored
249
vendor/github.com/gogo/googleapis/google/rpc/error_details.proto
generated
vendored
@ -1,249 +0,0 @@
|
|||||||
// Copyright 2020 Google LLC
|
|
||||||
//
|
|
||||||
// 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.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.rpc;
|
|
||||||
|
|
||||||
import "google/protobuf/duration.proto";
|
|
||||||
|
|
||||||
option go_package = "rpc";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option java_outer_classname = "ErrorDetailsProto";
|
|
||||||
option java_package = "com.google.rpc";
|
|
||||||
option objc_class_prefix = "RPC";
|
|
||||||
|
|
||||||
// Describes when the clients can retry a failed request. Clients could ignore
|
|
||||||
// the recommendation here or retry when this information is missing from error
|
|
||||||
// responses.
|
|
||||||
//
|
|
||||||
// It's always recommended that clients should use exponential backoff when
|
|
||||||
// retrying.
|
|
||||||
//
|
|
||||||
// Clients should wait until `retry_delay` amount of time has passed since
|
|
||||||
// receiving the error response before retrying. If retrying requests also
|
|
||||||
// fail, clients should use an exponential backoff scheme to gradually increase
|
|
||||||
// the delay between retries based on `retry_delay`, until either a maximum
|
|
||||||
// number of retries have been reached or a maximum retry delay cap has been
|
|
||||||
// reached.
|
|
||||||
message RetryInfo {
|
|
||||||
// Clients should wait at least this long between retrying the same request.
|
|
||||||
google.protobuf.Duration retry_delay = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes additional debugging info.
|
|
||||||
message DebugInfo {
|
|
||||||
// The stack trace entries indicating where the error occurred.
|
|
||||||
repeated string stack_entries = 1;
|
|
||||||
|
|
||||||
// Additional debugging information provided by the server.
|
|
||||||
string detail = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes how a quota check failed.
|
|
||||||
//
|
|
||||||
// For example if a daily limit was exceeded for the calling project,
|
|
||||||
// a service could respond with a QuotaFailure detail containing the project
|
|
||||||
// id and the description of the quota limit that was exceeded. If the
|
|
||||||
// calling project hasn't enabled the service in the developer console, then
|
|
||||||
// a service could respond with the project id and set `service_disabled`
|
|
||||||
// to true.
|
|
||||||
//
|
|
||||||
// Also see RetryInfo and Help types for other details about handling a
|
|
||||||
// quota failure.
|
|
||||||
message QuotaFailure {
|
|
||||||
// A message type used to describe a single quota violation. For example, a
|
|
||||||
// daily quota or a custom quota that was exceeded.
|
|
||||||
message Violation {
|
|
||||||
// The subject on which the quota check failed.
|
|
||||||
// For example, "clientip:<ip address of client>" or "project:<Google
|
|
||||||
// developer project id>".
|
|
||||||
string subject = 1;
|
|
||||||
|
|
||||||
// A description of how the quota check failed. Clients can use this
|
|
||||||
// description to find more about the quota configuration in the service's
|
|
||||||
// public documentation, or find the relevant quota limit to adjust through
|
|
||||||
// developer console.
|
|
||||||
//
|
|
||||||
// For example: "Service disabled" or "Daily Limit for read operations
|
|
||||||
// exceeded".
|
|
||||||
string description = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes all quota violations.
|
|
||||||
repeated Violation violations = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes the cause of the error with structured details.
|
|
||||||
//
|
|
||||||
// Example of an error when contacting the "pubsub.googleapis.com" API when it
|
|
||||||
// is not enabled:
|
|
||||||
//
|
|
||||||
// { "reason": "API_DISABLED"
|
|
||||||
// "domain": "googleapis.com"
|
|
||||||
// "metadata": {
|
|
||||||
// "resource": "projects/123",
|
|
||||||
// "service": "pubsub.googleapis.com"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// This response indicates that the pubsub.googleapis.com API is not enabled.
|
|
||||||
//
|
|
||||||
// Example of an error that is returned when attempting to create a Spanner
|
|
||||||
// instance in a region that is out of stock:
|
|
||||||
//
|
|
||||||
// { "reason": "STOCKOUT"
|
|
||||||
// "domain": "spanner.googleapis.com",
|
|
||||||
// "metadata": {
|
|
||||||
// "availableRegions": "us-central1,us-east2"
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
message ErrorInfo {
|
|
||||||
// The reason of the error. This is a constant value that identifies the
|
|
||||||
// proximate cause of the error. Error reasons are unique within a particular
|
|
||||||
// domain of errors. This should be at most 63 characters and match
|
|
||||||
// /[A-Z0-9_]+/.
|
|
||||||
string reason = 1;
|
|
||||||
|
|
||||||
// The logical grouping to which the "reason" belongs. The error domain
|
|
||||||
// is typically the registered service name of the tool or product that
|
|
||||||
// generates the error. Example: "pubsub.googleapis.com". If the error is
|
|
||||||
// generated by some common infrastructure, the error domain must be a
|
|
||||||
// globally unique value that identifies the infrastructure. For Google API
|
|
||||||
// infrastructure, the error domain is "googleapis.com".
|
|
||||||
string domain = 2;
|
|
||||||
|
|
||||||
// Additional structured details about this error.
|
|
||||||
//
|
|
||||||
// Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
|
|
||||||
// length. When identifying the current value of an exceeded limit, the units
|
|
||||||
// should be contained in the key, not the value. For example, rather than
|
|
||||||
// {"instanceLimit": "100/request"}, should be returned as,
|
|
||||||
// {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
|
|
||||||
// instances that can be created in a single (batch) request.
|
|
||||||
map<string, string> metadata = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes what preconditions have failed.
|
|
||||||
//
|
|
||||||
// For example, if an RPC failed because it required the Terms of Service to be
|
|
||||||
// acknowledged, it could list the terms of service violation in the
|
|
||||||
// PreconditionFailure message.
|
|
||||||
message PreconditionFailure {
|
|
||||||
// A message type used to describe a single precondition failure.
|
|
||||||
message Violation {
|
|
||||||
// The type of PreconditionFailure. We recommend using a service-specific
|
|
||||||
// enum type to define the supported precondition violation subjects. For
|
|
||||||
// example, "TOS" for "Terms of Service violation".
|
|
||||||
string type = 1;
|
|
||||||
|
|
||||||
// The subject, relative to the type, that failed.
|
|
||||||
// For example, "google.com/cloud" relative to the "TOS" type would indicate
|
|
||||||
// which terms of service is being referenced.
|
|
||||||
string subject = 2;
|
|
||||||
|
|
||||||
// A description of how the precondition failed. Developers can use this
|
|
||||||
// description to understand how to fix the failure.
|
|
||||||
//
|
|
||||||
// For example: "Terms of service not accepted".
|
|
||||||
string description = 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes all precondition violations.
|
|
||||||
repeated Violation violations = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes violations in a client request. This error type focuses on the
|
|
||||||
// syntactic aspects of the request.
|
|
||||||
message BadRequest {
|
|
||||||
// A message type used to describe a single bad request field.
|
|
||||||
message FieldViolation {
|
|
||||||
// A path leading to a field in the request body. The value will be a
|
|
||||||
// sequence of dot-separated identifiers that identify a protocol buffer
|
|
||||||
// field. E.g., "field_violations.field" would identify this field.
|
|
||||||
string field = 1;
|
|
||||||
|
|
||||||
// A description of why the request element is bad.
|
|
||||||
string description = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes all violations in a client request.
|
|
||||||
repeated FieldViolation field_violations = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Contains metadata about the request that clients can attach when filing a bug
|
|
||||||
// or providing other forms of feedback.
|
|
||||||
message RequestInfo {
|
|
||||||
// An opaque string that should only be interpreted by the service generating
|
|
||||||
// it. For example, it can be used to identify requests in the service's logs.
|
|
||||||
string request_id = 1;
|
|
||||||
|
|
||||||
// Any data that was used to serve this request. For example, an encrypted
|
|
||||||
// stack trace that can be sent back to the service provider for debugging.
|
|
||||||
string serving_data = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Describes the resource that is being accessed.
|
|
||||||
message ResourceInfo {
|
|
||||||
// A name for the type of resource being accessed, e.g. "sql table",
|
|
||||||
// "cloud storage bucket", "file", "Google calendar"; or the type URL
|
|
||||||
// of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
|
|
||||||
string resource_type = 1;
|
|
||||||
|
|
||||||
// The name of the resource being accessed. For example, a shared calendar
|
|
||||||
// name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
|
|
||||||
// error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
|
|
||||||
string resource_name = 2;
|
|
||||||
|
|
||||||
// The owner of the resource (optional).
|
|
||||||
// For example, "user:<owner email>" or "project:<Google developer project
|
|
||||||
// id>".
|
|
||||||
string owner = 3;
|
|
||||||
|
|
||||||
// Describes what error is encountered when accessing this resource.
|
|
||||||
// For example, updating a cloud project may require the `writer` permission
|
|
||||||
// on the developer console project.
|
|
||||||
string description = 4;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Provides links to documentation or for performing an out of band action.
|
|
||||||
//
|
|
||||||
// For example, if a quota check failed with an error indicating the calling
|
|
||||||
// project hasn't enabled the accessed service, this can contain a URL pointing
|
|
||||||
// directly to the right place in the developer console to flip the bit.
|
|
||||||
message Help {
|
|
||||||
// Describes a URL link.
|
|
||||||
message Link {
|
|
||||||
// Describes what the link offers.
|
|
||||||
string description = 1;
|
|
||||||
|
|
||||||
// The URL of the link.
|
|
||||||
string url = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
// URL(s) pointing to additional information on handling the current error.
|
|
||||||
repeated Link links = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Provides a localized error message that is safe to return to the user
|
|
||||||
// which can be attached to an RPC error.
|
|
||||||
message LocalizedMessage {
|
|
||||||
// The locale used following the specification defined at
|
|
||||||
// http://www.rfc-editor.org/rfc/bcp/bcp47.txt.
|
|
||||||
// Examples are: "en-US", "fr-CH", "es-MX"
|
|
||||||
string locale = 1;
|
|
||||||
|
|
||||||
// The localized error message in the above locale.
|
|
||||||
string message = 2;
|
|
||||||
}
|
|
680
vendor/github.com/gogo/googleapis/google/rpc/status.pb.go
generated
vendored
680
vendor/github.com/gogo/googleapis/google/rpc/status.pb.go
generated
vendored
@ -1,680 +0,0 @@
|
|||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
|
||||||
// source: google/rpc/status.proto
|
|
||||||
|
|
||||||
package rpc
|
|
||||||
|
|
||||||
import (
|
|
||||||
bytes "bytes"
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/gogo/protobuf/proto"
|
|
||||||
types "github.com/gogo/protobuf/types"
|
|
||||||
io "io"
|
|
||||||
math "math"
|
|
||||||
math_bits "math/bits"
|
|
||||||
reflect "reflect"
|
|
||||||
strings "strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
// The `Status` type defines a logical error model that is suitable for
|
|
||||||
// different programming environments, including REST APIs and RPC APIs. It is
|
|
||||||
// used by [gRPC](https://github.com/grpc). Each `Status` message contains
|
|
||||||
// three pieces of data: error code, error message, and error details.
|
|
||||||
//
|
|
||||||
// You can find out more about this error model and how to work with it in the
|
|
||||||
// [API Design Guide](https://cloud.google.com/apis/design/errors).
|
|
||||||
type Status struct {
|
|
||||||
// The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
|
|
||||||
Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"`
|
|
||||||
// A developer-facing error message, which should be in English. Any
|
|
||||||
// user-facing error message should be localized and sent in the
|
|
||||||
// [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
|
|
||||||
Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"`
|
|
||||||
// A list of messages that carry the error details. There is a common set of
|
|
||||||
// message types for APIs to use.
|
|
||||||
Details []*types.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
|
||||||
XXX_unrecognized []byte `json:"-"`
|
|
||||||
XXX_sizecache int32 `json:"-"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Status) Reset() { *m = Status{} }
|
|
||||||
func (*Status) ProtoMessage() {}
|
|
||||||
func (*Status) Descriptor() ([]byte, []int) {
|
|
||||||
return fileDescriptor_24d244abaf643bfe, []int{0}
|
|
||||||
}
|
|
||||||
func (m *Status) XXX_Unmarshal(b []byte) error {
|
|
||||||
return m.Unmarshal(b)
|
|
||||||
}
|
|
||||||
func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
|
||||||
if deterministic {
|
|
||||||
return xxx_messageInfo_Status.Marshal(b, m, deterministic)
|
|
||||||
} else {
|
|
||||||
b = b[:cap(b)]
|
|
||||||
n, err := m.MarshalToSizedBuffer(b)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return b[:n], nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
func (m *Status) XXX_Merge(src proto.Message) {
|
|
||||||
xxx_messageInfo_Status.Merge(m, src)
|
|
||||||
}
|
|
||||||
func (m *Status) XXX_Size() int {
|
|
||||||
return m.Size()
|
|
||||||
}
|
|
||||||
func (m *Status) XXX_DiscardUnknown() {
|
|
||||||
xxx_messageInfo_Status.DiscardUnknown(m)
|
|
||||||
}
|
|
||||||
|
|
||||||
var xxx_messageInfo_Status proto.InternalMessageInfo
|
|
||||||
|
|
||||||
func (m *Status) GetCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.Code
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Status) GetMessage() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Message
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Status) GetDetails() []*types.Any {
|
|
||||||
if m != nil {
|
|
||||||
return m.Details
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (*Status) XXX_MessageName() string {
|
|
||||||
return "google.rpc.Status"
|
|
||||||
}
|
|
||||||
func init() {
|
|
||||||
proto.RegisterType((*Status)(nil), "google.rpc.Status")
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("google/rpc/status.proto", fileDescriptor_24d244abaf643bfe) }
|
|
||||||
|
|
||||||
var fileDescriptor_24d244abaf643bfe = []byte{
|
|
||||||
// 238 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xcf, 0xcf, 0x4f,
|
|
||||||
0xcf, 0x49, 0xd5, 0x2f, 0x2a, 0x48, 0xd6, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0x2d, 0xd6, 0x2b, 0x28,
|
|
||||||
0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x82, 0x48, 0xe8, 0x15, 0x15, 0x24, 0x4b, 0x49, 0x42, 0x15, 0x81,
|
|
||||||
0x65, 0x92, 0x4a, 0xd3, 0xf4, 0x13, 0xf3, 0x2a, 0x21, 0xca, 0x94, 0xd2, 0xb8, 0xd8, 0x82, 0xc1,
|
|
||||||
0xda, 0x84, 0x84, 0xb8, 0x58, 0x92, 0xf3, 0x53, 0x52, 0x25, 0x18, 0x15, 0x18, 0x35, 0x58, 0x83,
|
|
||||||
0xc0, 0x6c, 0x21, 0x09, 0x2e, 0xf6, 0xdc, 0xd4, 0xe2, 0xe2, 0xc4, 0xf4, 0x54, 0x09, 0x26, 0x05,
|
|
||||||
0x46, 0x0d, 0xce, 0x20, 0x18, 0x57, 0x48, 0x8f, 0x8b, 0x3d, 0x25, 0xb5, 0x24, 0x31, 0x33, 0xa7,
|
|
||||||
0x58, 0x82, 0x59, 0x81, 0x59, 0x83, 0xdb, 0x48, 0x44, 0x0f, 0x6a, 0x21, 0xcc, 0x12, 0x3d, 0xc7,
|
|
||||||
0xbc, 0xca, 0x20, 0x98, 0x22, 0xa7, 0xc4, 0x0b, 0x0f, 0xe5, 0x18, 0x6e, 0x3c, 0x94, 0x63, 0xf8,
|
|
||||||
0xf0, 0x50, 0x8e, 0xf1, 0xc7, 0x43, 0x39, 0xc6, 0x86, 0x47, 0x72, 0x8c, 0x2b, 0x1e, 0xc9, 0x31,
|
|
||||||
0x9e, 0x78, 0x24, 0xc7, 0x78, 0xe1, 0x91, 0x1c, 0xe3, 0x83, 0x47, 0x72, 0x8c, 0x2f, 0x1e, 0xc9,
|
|
||||||
0x31, 0x7c, 0x00, 0x89, 0x3f, 0x96, 0x63, 0x3c, 0xf1, 0x58, 0x8e, 0x91, 0x8b, 0x2f, 0x39, 0x3f,
|
|
||||||
0x57, 0x0f, 0xe1, 0x11, 0x27, 0x6e, 0x88, 0x5b, 0x03, 0x40, 0x56, 0x04, 0x30, 0x46, 0x31, 0x17,
|
|
||||||
0x15, 0x24, 0xff, 0x60, 0x64, 0x5c, 0xc4, 0xc4, 0x1c, 0x14, 0xe0, 0x9c, 0xc4, 0x06, 0xb6, 0xd9,
|
|
||||||
0x18, 0x10, 0x00, 0x00, 0xff, 0xff, 0x16, 0xcd, 0x7b, 0x60, 0x13, 0x01, 0x00, 0x00,
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Status) Compare(that interface{}) int {
|
|
||||||
if that == nil {
|
|
||||||
if this == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
that1, ok := that.(*Status)
|
|
||||||
if !ok {
|
|
||||||
that2, ok := that.(Status)
|
|
||||||
if ok {
|
|
||||||
that1 = &that2
|
|
||||||
} else {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if that1 == nil {
|
|
||||||
if this == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
} else if this == nil {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
if this.Code != that1.Code {
|
|
||||||
if this.Code < that1.Code {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
if this.Message != that1.Message {
|
|
||||||
if this.Message < that1.Message {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
if len(this.Details) != len(that1.Details) {
|
|
||||||
if len(this.Details) < len(that1.Details) {
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
for i := range this.Details {
|
|
||||||
if c := this.Details[i].Compare(that1.Details[i]); c != 0 {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if c := bytes.Compare(this.XXX_unrecognized, that1.XXX_unrecognized); c != 0 {
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
func (this *Status) Equal(that interface{}) bool {
|
|
||||||
if that == nil {
|
|
||||||
return this == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
that1, ok := that.(*Status)
|
|
||||||
if !ok {
|
|
||||||
that2, ok := that.(Status)
|
|
||||||
if ok {
|
|
||||||
that1 = &that2
|
|
||||||
} else {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if that1 == nil {
|
|
||||||
return this == nil
|
|
||||||
} else if this == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if this.Code != that1.Code {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if this.Message != that1.Message {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if len(this.Details) != len(that1.Details) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for i := range this.Details {
|
|
||||||
if !this.Details[i].Equal(that1.Details[i]) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
func (this *Status) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&rpc.Status{")
|
|
||||||
s = append(s, "Code: "+fmt.Sprintf("%#v", this.Code)+",\n")
|
|
||||||
s = append(s, "Message: "+fmt.Sprintf("%#v", this.Message)+",\n")
|
|
||||||
if this.Details != nil {
|
|
||||||
s = append(s, "Details: "+fmt.Sprintf("%#v", this.Details)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func valueToGoStringStatus(v interface{}, typ string) string {
|
|
||||||
rv := reflect.ValueOf(v)
|
|
||||||
if rv.IsNil() {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
pv := reflect.Indirect(rv).Interface()
|
|
||||||
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
|
|
||||||
}
|
|
||||||
func (m *Status) Marshal() (dAtA []byte, err error) {
|
|
||||||
size := m.Size()
|
|
||||||
dAtA = make([]byte, size)
|
|
||||||
n, err := m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return dAtA[:n], nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Status) MarshalTo(dAtA []byte) (int, error) {
|
|
||||||
size := m.Size()
|
|
||||||
return m.MarshalToSizedBuffer(dAtA[:size])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *Status) MarshalToSizedBuffer(dAtA []byte) (int, error) {
|
|
||||||
i := len(dAtA)
|
|
||||||
_ = i
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
if m.XXX_unrecognized != nil {
|
|
||||||
i -= len(m.XXX_unrecognized)
|
|
||||||
copy(dAtA[i:], m.XXX_unrecognized)
|
|
||||||
}
|
|
||||||
if len(m.Details) > 0 {
|
|
||||||
for iNdEx := len(m.Details) - 1; iNdEx >= 0; iNdEx-- {
|
|
||||||
{
|
|
||||||
size, err := m.Details[iNdEx].MarshalToSizedBuffer(dAtA[:i])
|
|
||||||
if err != nil {
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
i -= size
|
|
||||||
i = encodeVarintStatus(dAtA, i, uint64(size))
|
|
||||||
}
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x1a
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if len(m.Message) > 0 {
|
|
||||||
i -= len(m.Message)
|
|
||||||
copy(dAtA[i:], m.Message)
|
|
||||||
i = encodeVarintStatus(dAtA, i, uint64(len(m.Message)))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x12
|
|
||||||
}
|
|
||||||
if m.Code != 0 {
|
|
||||||
i = encodeVarintStatus(dAtA, i, uint64(m.Code))
|
|
||||||
i--
|
|
||||||
dAtA[i] = 0x8
|
|
||||||
}
|
|
||||||
return len(dAtA) - i, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func encodeVarintStatus(dAtA []byte, offset int, v uint64) int {
|
|
||||||
offset -= sovStatus(v)
|
|
||||||
base := offset
|
|
||||||
for v >= 1<<7 {
|
|
||||||
dAtA[offset] = uint8(v&0x7f | 0x80)
|
|
||||||
v >>= 7
|
|
||||||
offset++
|
|
||||||
}
|
|
||||||
dAtA[offset] = uint8(v)
|
|
||||||
return base
|
|
||||||
}
|
|
||||||
func NewPopulatedStatus(r randyStatus, easy bool) *Status {
|
|
||||||
this := &Status{}
|
|
||||||
this.Code = int32(r.Int31())
|
|
||||||
if r.Intn(2) == 0 {
|
|
||||||
this.Code *= -1
|
|
||||||
}
|
|
||||||
this.Message = string(randStringStatus(r))
|
|
||||||
if r.Intn(5) != 0 {
|
|
||||||
v1 := r.Intn(5)
|
|
||||||
this.Details = make([]*types.Any, v1)
|
|
||||||
for i := 0; i < v1; i++ {
|
|
||||||
this.Details[i] = types.NewPopulatedAny(r, easy)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !easy && r.Intn(10) != 0 {
|
|
||||||
this.XXX_unrecognized = randUnrecognizedStatus(r, 4)
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
type randyStatus interface {
|
|
||||||
Float32() float32
|
|
||||||
Float64() float64
|
|
||||||
Int63() int64
|
|
||||||
Int31() int32
|
|
||||||
Uint32() uint32
|
|
||||||
Intn(n int) int
|
|
||||||
}
|
|
||||||
|
|
||||||
func randUTF8RuneStatus(r randyStatus) rune {
|
|
||||||
ru := r.Intn(62)
|
|
||||||
if ru < 10 {
|
|
||||||
return rune(ru + 48)
|
|
||||||
} else if ru < 36 {
|
|
||||||
return rune(ru + 55)
|
|
||||||
}
|
|
||||||
return rune(ru + 61)
|
|
||||||
}
|
|
||||||
func randStringStatus(r randyStatus) string {
|
|
||||||
v2 := r.Intn(100)
|
|
||||||
tmps := make([]rune, v2)
|
|
||||||
for i := 0; i < v2; i++ {
|
|
||||||
tmps[i] = randUTF8RuneStatus(r)
|
|
||||||
}
|
|
||||||
return string(tmps)
|
|
||||||
}
|
|
||||||
func randUnrecognizedStatus(r randyStatus, maxFieldNumber int) (dAtA []byte) {
|
|
||||||
l := r.Intn(5)
|
|
||||||
for i := 0; i < l; i++ {
|
|
||||||
wire := r.Intn(4)
|
|
||||||
if wire == 3 {
|
|
||||||
wire = 5
|
|
||||||
}
|
|
||||||
fieldNumber := maxFieldNumber + r.Intn(100)
|
|
||||||
dAtA = randFieldStatus(dAtA, r, fieldNumber, wire)
|
|
||||||
}
|
|
||||||
return dAtA
|
|
||||||
}
|
|
||||||
func randFieldStatus(dAtA []byte, r randyStatus, fieldNumber int, wire int) []byte {
|
|
||||||
key := uint32(fieldNumber)<<3 | uint32(wire)
|
|
||||||
switch wire {
|
|
||||||
case 0:
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(key))
|
|
||||||
v3 := r.Int63()
|
|
||||||
if r.Intn(2) == 0 {
|
|
||||||
v3 *= -1
|
|
||||||
}
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(v3))
|
|
||||||
case 1:
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(key))
|
|
||||||
dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))
|
|
||||||
case 2:
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(key))
|
|
||||||
ll := r.Intn(100)
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(ll))
|
|
||||||
for j := 0; j < ll; j++ {
|
|
||||||
dAtA = append(dAtA, byte(r.Intn(256)))
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
dAtA = encodeVarintPopulateStatus(dAtA, uint64(key))
|
|
||||||
dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))
|
|
||||||
}
|
|
||||||
return dAtA
|
|
||||||
}
|
|
||||||
func encodeVarintPopulateStatus(dAtA []byte, v uint64) []byte {
|
|
||||||
for v >= 1<<7 {
|
|
||||||
dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80))
|
|
||||||
v >>= 7
|
|
||||||
}
|
|
||||||
dAtA = append(dAtA, uint8(v))
|
|
||||||
return dAtA
|
|
||||||
}
|
|
||||||
func (m *Status) Size() (n int) {
|
|
||||||
if m == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
if m.Code != 0 {
|
|
||||||
n += 1 + sovStatus(uint64(m.Code))
|
|
||||||
}
|
|
||||||
l = len(m.Message)
|
|
||||||
if l > 0 {
|
|
||||||
n += 1 + l + sovStatus(uint64(l))
|
|
||||||
}
|
|
||||||
if len(m.Details) > 0 {
|
|
||||||
for _, e := range m.Details {
|
|
||||||
l = e.Size()
|
|
||||||
n += 1 + l + sovStatus(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if m.XXX_unrecognized != nil {
|
|
||||||
n += len(m.XXX_unrecognized)
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
func sovStatus(x uint64) (n int) {
|
|
||||||
return (math_bits.Len64(x|1) + 6) / 7
|
|
||||||
}
|
|
||||||
func sozStatus(x uint64) (n int) {
|
|
||||||
return sovStatus(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
|
||||||
}
|
|
||||||
func (this *Status) String() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
repeatedStringForDetails := "[]*Any{"
|
|
||||||
for _, f := range this.Details {
|
|
||||||
repeatedStringForDetails += strings.Replace(fmt.Sprintf("%v", f), "Any", "types.Any", 1) + ","
|
|
||||||
}
|
|
||||||
repeatedStringForDetails += "}"
|
|
||||||
s := strings.Join([]string{`&Status{`,
|
|
||||||
`Code:` + fmt.Sprintf("%v", this.Code) + `,`,
|
|
||||||
`Message:` + fmt.Sprintf("%v", this.Message) + `,`,
|
|
||||||
`Details:` + repeatedStringForDetails + `,`,
|
|
||||||
`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
|
|
||||||
`}`,
|
|
||||||
}, "")
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
func valueToStringStatus(v interface{}) string {
|
|
||||||
rv := reflect.ValueOf(v)
|
|
||||||
if rv.IsNil() {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
pv := reflect.Indirect(rv).Interface()
|
|
||||||
return fmt.Sprintf("*%v", pv)
|
|
||||||
}
|
|
||||||
func (m *Status) Unmarshal(dAtA []byte) error {
|
|
||||||
l := len(dAtA)
|
|
||||||
iNdEx := 0
|
|
||||||
for iNdEx < l {
|
|
||||||
preIndex := iNdEx
|
|
||||||
var wire uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
wire |= uint64(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fieldNum := int32(wire >> 3)
|
|
||||||
wireType := int(wire & 0x7)
|
|
||||||
if wireType == 4 {
|
|
||||||
return fmt.Errorf("proto: Status: wiretype end group for non-group")
|
|
||||||
}
|
|
||||||
if fieldNum <= 0 {
|
|
||||||
return fmt.Errorf("proto: Status: illegal tag %d (wire type %d)", fieldNum, wire)
|
|
||||||
}
|
|
||||||
switch fieldNum {
|
|
||||||
case 1:
|
|
||||||
if wireType != 0 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType)
|
|
||||||
}
|
|
||||||
m.Code = 0
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
m.Code |= int32(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Message", wireType)
|
|
||||||
}
|
|
||||||
var stringLen uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
stringLen |= uint64(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
intStringLen := int(stringLen)
|
|
||||||
if intStringLen < 0 {
|
|
||||||
return ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + intStringLen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Message = string(dAtA[iNdEx:postIndex])
|
|
||||||
iNdEx = postIndex
|
|
||||||
case 3:
|
|
||||||
if wireType != 2 {
|
|
||||||
return fmt.Errorf("proto: wrong wireType = %d for field Details", wireType)
|
|
||||||
}
|
|
||||||
var msglen int
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
msglen |= int(b&0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if msglen < 0 {
|
|
||||||
return ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
postIndex := iNdEx + msglen
|
|
||||||
if postIndex < 0 {
|
|
||||||
return ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
if postIndex > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.Details = append(m.Details, &types.Any{})
|
|
||||||
if err := m.Details[len(m.Details)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
iNdEx = postIndex
|
|
||||||
default:
|
|
||||||
iNdEx = preIndex
|
|
||||||
skippy, err := skipStatus(dAtA[iNdEx:])
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if (skippy < 0) || (iNdEx+skippy) < 0 {
|
|
||||||
return ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
if (iNdEx + skippy) > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...)
|
|
||||||
iNdEx += skippy
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if iNdEx > l {
|
|
||||||
return io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func skipStatus(dAtA []byte) (n int, err error) {
|
|
||||||
l := len(dAtA)
|
|
||||||
iNdEx := 0
|
|
||||||
depth := 0
|
|
||||||
for iNdEx < l {
|
|
||||||
var wire uint64
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return 0, ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return 0, io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
wire |= (uint64(b) & 0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
wireType := int(wire & 0x7)
|
|
||||||
switch wireType {
|
|
||||||
case 0:
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return 0, ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return 0, io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
iNdEx++
|
|
||||||
if dAtA[iNdEx-1] < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case 1:
|
|
||||||
iNdEx += 8
|
|
||||||
case 2:
|
|
||||||
var length int
|
|
||||||
for shift := uint(0); ; shift += 7 {
|
|
||||||
if shift >= 64 {
|
|
||||||
return 0, ErrIntOverflowStatus
|
|
||||||
}
|
|
||||||
if iNdEx >= l {
|
|
||||||
return 0, io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
b := dAtA[iNdEx]
|
|
||||||
iNdEx++
|
|
||||||
length |= (int(b) & 0x7F) << shift
|
|
||||||
if b < 0x80 {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if length < 0 {
|
|
||||||
return 0, ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
iNdEx += length
|
|
||||||
case 3:
|
|
||||||
depth++
|
|
||||||
case 4:
|
|
||||||
if depth == 0 {
|
|
||||||
return 0, ErrUnexpectedEndOfGroupStatus
|
|
||||||
}
|
|
||||||
depth--
|
|
||||||
case 5:
|
|
||||||
iNdEx += 4
|
|
||||||
default:
|
|
||||||
return 0, fmt.Errorf("proto: illegal wireType %d", wireType)
|
|
||||||
}
|
|
||||||
if iNdEx < 0 {
|
|
||||||
return 0, ErrInvalidLengthStatus
|
|
||||||
}
|
|
||||||
if depth == 0 {
|
|
||||||
return iNdEx, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0, io.ErrUnexpectedEOF
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
ErrInvalidLengthStatus = fmt.Errorf("proto: negative length found during unmarshaling")
|
|
||||||
ErrIntOverflowStatus = fmt.Errorf("proto: integer overflow")
|
|
||||||
ErrUnexpectedEndOfGroupStatus = fmt.Errorf("proto: unexpected end of group")
|
|
||||||
)
|
|
47
vendor/github.com/gogo/googleapis/google/rpc/status.proto
generated
vendored
47
vendor/github.com/gogo/googleapis/google/rpc/status.proto
generated
vendored
@ -1,47 +0,0 @@
|
|||||||
// Copyright 2020 Google LLC
|
|
||||||
//
|
|
||||||
// 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.
|
|
||||||
|
|
||||||
syntax = "proto3";
|
|
||||||
|
|
||||||
package google.rpc;
|
|
||||||
|
|
||||||
import "google/protobuf/any.proto";
|
|
||||||
|
|
||||||
option cc_enable_arenas = true;
|
|
||||||
option go_package = "rpc";
|
|
||||||
option java_multiple_files = true;
|
|
||||||
option java_outer_classname = "StatusProto";
|
|
||||||
option java_package = "com.google.rpc";
|
|
||||||
option objc_class_prefix = "RPC";
|
|
||||||
|
|
||||||
// The `Status` type defines a logical error model that is suitable for
|
|
||||||
// different programming environments, including REST APIs and RPC APIs. It is
|
|
||||||
// used by [gRPC](https://github.com/grpc). Each `Status` message contains
|
|
||||||
// three pieces of data: error code, error message, and error details.
|
|
||||||
//
|
|
||||||
// You can find out more about this error model and how to work with it in the
|
|
||||||
// [API Design Guide](https://cloud.google.com/apis/design/errors).
|
|
||||||
message Status {
|
|
||||||
// The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
|
|
||||||
int32 code = 1;
|
|
||||||
|
|
||||||
// A developer-facing error message, which should be in English. Any
|
|
||||||
// user-facing error message should be localized and sent in the
|
|
||||||
// [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
|
|
||||||
string message = 2;
|
|
||||||
|
|
||||||
// A list of messages that carry the error details. There is a common set of
|
|
||||||
// message types for APIs to use.
|
|
||||||
repeated google.protobuf.Any details = 3;
|
|
||||||
}
|
|
37
vendor/github.com/gogo/protobuf/gogoproto/Makefile
generated
vendored
37
vendor/github.com/gogo/protobuf/gogoproto/Makefile
generated
vendored
@ -1,37 +0,0 @@
|
|||||||
# Protocol Buffers for Go with Gadgets
|
|
||||||
#
|
|
||||||
# Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
# http://github.com/gogo/protobuf
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are
|
|
||||||
# met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following disclaimer
|
|
||||||
# in the documentation and/or other materials provided with the
|
|
||||||
# distribution.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
regenerate:
|
|
||||||
go install github.com/gogo/protobuf/protoc-gen-gogo
|
|
||||||
protoc --gogo_out=Mgoogle/protobuf/descriptor.proto=github.com/gogo/protobuf/protoc-gen-gogo/descriptor:../../../../ --proto_path=../../../../:../protobuf/:. *.proto
|
|
||||||
|
|
||||||
restore:
|
|
||||||
cp gogo.pb.golden gogo.pb.go
|
|
||||||
|
|
||||||
preserve:
|
|
||||||
cp gogo.pb.go gogo.pb.golden
|
|
169
vendor/github.com/gogo/protobuf/gogoproto/doc.go
generated
vendored
169
vendor/github.com/gogo/protobuf/gogoproto/doc.go
generated
vendored
@ -1,169 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package gogoproto provides extensions for protocol buffers to achieve:
|
|
||||||
|
|
||||||
- fast marshalling and unmarshalling.
|
|
||||||
- peace of mind by optionally generating test and benchmark code.
|
|
||||||
- more canonical Go structures.
|
|
||||||
- less typing by optionally generating extra helper code.
|
|
||||||
- goprotobuf compatibility
|
|
||||||
|
|
||||||
More Canonical Go Structures
|
|
||||||
|
|
||||||
A lot of time working with a goprotobuf struct will lead you to a place where you create another struct that is easier to work with and then have a function to copy the values between the two structs.
|
|
||||||
You might also find that basic structs that started their life as part of an API need to be sent over the wire. With gob, you could just send it. With goprotobuf, you need to make a parallel struct.
|
|
||||||
Gogoprotobuf tries to fix these problems with the nullable, embed, customtype and customname field extensions.
|
|
||||||
|
|
||||||
- nullable, if false, a field is generated without a pointer (see warning below).
|
|
||||||
- embed, if true, the field is generated as an embedded field.
|
|
||||||
- customtype, It works with the Marshal and Unmarshal methods, to allow you to have your own types in your struct, but marshal to bytes. For example, custom.Uuid or custom.Fixed128
|
|
||||||
- customname (beta), Changes the generated fieldname. This is especially useful when generated methods conflict with fieldnames.
|
|
||||||
- casttype (beta), Changes the generated fieldtype. All generated code assumes that this type is castable to the protocol buffer field type. It does not work for structs or enums.
|
|
||||||
- castkey (beta), Changes the generated fieldtype for a map key. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps.
|
|
||||||
- castvalue (beta), Changes the generated fieldtype for a map value. All generated code assumes that this type is castable to the protocol buffer field type. Only supported on maps.
|
|
||||||
|
|
||||||
Warning about nullable: According to the Protocol Buffer specification, you should be able to tell whether a field is set or unset. With the option nullable=false this feature is lost, since your non-nullable fields will always be set. It can be seen as a layer on top of Protocol Buffers, where before and after marshalling all non-nullable fields are set and they cannot be unset.
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
for a quicker overview.
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
package test;
|
|
||||||
|
|
||||||
import "github.com/gogo/protobuf/gogoproto/gogo.proto";
|
|
||||||
|
|
||||||
message A {
|
|
||||||
optional string Description = 1 [(gogoproto.nullable) = false];
|
|
||||||
optional int64 Number = 2 [(gogoproto.nullable) = false];
|
|
||||||
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
Will generate a go struct which looks a lot like this:
|
|
||||||
|
|
||||||
type A struct {
|
|
||||||
Description string
|
|
||||||
Number int64
|
|
||||||
Id github_com_gogo_protobuf_test_custom.Uuid
|
|
||||||
}
|
|
||||||
|
|
||||||
You will see there are no pointers, since all fields are non-nullable.
|
|
||||||
You will also see a custom type which marshals to a string.
|
|
||||||
Be warned it is your responsibility to test your custom types thoroughly.
|
|
||||||
You should think of every possible empty and nil case for your marshaling, unmarshaling and size methods.
|
|
||||||
|
|
||||||
Next we will embed the message A in message B.
|
|
||||||
|
|
||||||
message B {
|
|
||||||
optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
|
|
||||||
repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
See below that A is embedded in B.
|
|
||||||
|
|
||||||
type B struct {
|
|
||||||
A
|
|
||||||
G []github_com_gogo_protobuf_test_custom.Uint128
|
|
||||||
}
|
|
||||||
|
|
||||||
Also see the repeated custom type.
|
|
||||||
|
|
||||||
type Uint128 [2]uint64
|
|
||||||
|
|
||||||
Next we will create a custom name for one of our fields.
|
|
||||||
|
|
||||||
message C {
|
|
||||||
optional int64 size = 1 [(gogoproto.customname) = "MySize"];
|
|
||||||
}
|
|
||||||
|
|
||||||
See below that the field's name is MySize and not Size.
|
|
||||||
|
|
||||||
type C struct {
|
|
||||||
MySize *int64
|
|
||||||
}
|
|
||||||
|
|
||||||
The is useful when having a protocol buffer message with a field name which conflicts with a generated method.
|
|
||||||
As an example, having a field name size and using the sizer plugin to generate a Size method will cause a go compiler error.
|
|
||||||
Using customname you can fix this error without changing the field name.
|
|
||||||
This is typically useful when working with a protocol buffer that was designed before these methods and/or the go language were avialable.
|
|
||||||
|
|
||||||
Gogoprotobuf also has some more subtle changes, these could be changed back:
|
|
||||||
|
|
||||||
- the generated package name for imports do not have the extra /filename.pb,
|
|
||||||
but are actually the imports specified in the .proto file.
|
|
||||||
|
|
||||||
Gogoprotobuf also has lost some features which should be brought back with time:
|
|
||||||
|
|
||||||
- Marshalling and unmarshalling with reflect and without the unsafe package,
|
|
||||||
this requires work in pointer_reflect.go
|
|
||||||
|
|
||||||
Why does nullable break protocol buffer specifications:
|
|
||||||
|
|
||||||
The protocol buffer specification states, somewhere, that you should be able to tell whether a
|
|
||||||
field is set or unset. With the option nullable=false this feature is lost,
|
|
||||||
since your non-nullable fields will always be set. It can be seen as a layer on top of
|
|
||||||
protocol buffers, where before and after marshalling all non-nullable fields are set
|
|
||||||
and they cannot be unset.
|
|
||||||
|
|
||||||
Goprotobuf Compatibility:
|
|
||||||
|
|
||||||
Gogoprotobuf is compatible with Goprotobuf, because it is compatible with protocol buffers.
|
|
||||||
Gogoprotobuf generates the same code as goprotobuf if no extensions are used.
|
|
||||||
The enumprefix, getters and stringer extensions can be used to remove some of the unnecessary code generated by goprotobuf:
|
|
||||||
|
|
||||||
- gogoproto_import, if false, the generated code imports github.com/golang/protobuf/proto instead of github.com/gogo/protobuf/proto.
|
|
||||||
- goproto_enum_prefix, if false, generates the enum constant names without the messagetype prefix
|
|
||||||
- goproto_enum_stringer (experimental), if false, the enum is generated without the default string method, this is useful for rather using enum_stringer, or allowing you to write your own string method.
|
|
||||||
- goproto_getters, if false, the message is generated without get methods, this is useful when you would rather want to use face
|
|
||||||
- goproto_stringer, if false, the message is generated without the default string method, this is useful for rather using stringer, or allowing you to write your own string method.
|
|
||||||
- goproto_extensions_map (beta), if false, the extensions field is generated as type []byte instead of type map[int32]proto.Extension
|
|
||||||
- goproto_unrecognized (beta), if false, XXX_unrecognized field is not generated. This is useful in conjunction with gogoproto.nullable=false, to generate structures completely devoid of pointers and reduce GC pressure at the cost of losing information about unrecognized fields.
|
|
||||||
- goproto_registration (beta), if true, the generated files will register all messages and types against both gogo/protobuf and golang/protobuf. This is necessary when using third-party packages which read registrations from golang/protobuf (such as the grpc-gateway).
|
|
||||||
|
|
||||||
Less Typing and Peace of Mind is explained in their specific plugin folders godoc:
|
|
||||||
|
|
||||||
- github.com/gogo/protobuf/plugin/<extension_name>
|
|
||||||
|
|
||||||
If you do not use any of these extension the code that is generated
|
|
||||||
will be the same as if goprotobuf has generated it.
|
|
||||||
|
|
||||||
The most complete way to see examples is to look at
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/thetest.proto
|
|
||||||
|
|
||||||
Gogoprototest is a seperate project,
|
|
||||||
because we want to keep gogoprotobuf independent of goprotobuf,
|
|
||||||
but we still want to test it thoroughly.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package gogoproto
|
|
874
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
generated
vendored
874
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.go
generated
vendored
@ -1,874 +0,0 @@
|
|||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
|
||||||
// source: gogo.proto
|
|
||||||
|
|
||||||
package gogoproto
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
proto "github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
math "math"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
// This is a compile-time assertion to ensure that this generated file
|
|
||||||
// is compatible with the proto package it is being compiled against.
|
|
||||||
// A compilation error at this line likely means your copy of the
|
|
||||||
// proto package needs to be updated.
|
|
||||||
const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package
|
|
||||||
|
|
||||||
var E_GoprotoEnumPrefix = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 62001,
|
|
||||||
Name: "gogoproto.goproto_enum_prefix",
|
|
||||||
Tag: "varint,62001,opt,name=goproto_enum_prefix",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoEnumStringer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 62021,
|
|
||||||
Name: "gogoproto.goproto_enum_stringer",
|
|
||||||
Tag: "varint,62021,opt,name=goproto_enum_stringer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EnumStringer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 62022,
|
|
||||||
Name: "gogoproto.enum_stringer",
|
|
||||||
Tag: "varint,62022,opt,name=enum_stringer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EnumCustomname = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 62023,
|
|
||||||
Name: "gogoproto.enum_customname",
|
|
||||||
Tag: "bytes,62023,opt,name=enum_customname",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Enumdecl = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 62024,
|
|
||||||
Name: "gogoproto.enumdecl",
|
|
||||||
Tag: "varint,62024,opt,name=enumdecl",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EnumvalueCustomname = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.EnumValueOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 66001,
|
|
||||||
Name: "gogoproto.enumvalue_customname",
|
|
||||||
Tag: "bytes,66001,opt,name=enumvalue_customname",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoGettersAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63001,
|
|
||||||
Name: "gogoproto.goproto_getters_all",
|
|
||||||
Tag: "varint,63001,opt,name=goproto_getters_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoEnumPrefixAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63002,
|
|
||||||
Name: "gogoproto.goproto_enum_prefix_all",
|
|
||||||
Tag: "varint,63002,opt,name=goproto_enum_prefix_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoStringerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63003,
|
|
||||||
Name: "gogoproto.goproto_stringer_all",
|
|
||||||
Tag: "varint,63003,opt,name=goproto_stringer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_VerboseEqualAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63004,
|
|
||||||
Name: "gogoproto.verbose_equal_all",
|
|
||||||
Tag: "varint,63004,opt,name=verbose_equal_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_FaceAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63005,
|
|
||||||
Name: "gogoproto.face_all",
|
|
||||||
Tag: "varint,63005,opt,name=face_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GostringAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63006,
|
|
||||||
Name: "gogoproto.gostring_all",
|
|
||||||
Tag: "varint,63006,opt,name=gostring_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_PopulateAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63007,
|
|
||||||
Name: "gogoproto.populate_all",
|
|
||||||
Tag: "varint,63007,opt,name=populate_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_StringerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63008,
|
|
||||||
Name: "gogoproto.stringer_all",
|
|
||||||
Tag: "varint,63008,opt,name=stringer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_OnlyoneAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63009,
|
|
||||||
Name: "gogoproto.onlyone_all",
|
|
||||||
Tag: "varint,63009,opt,name=onlyone_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EqualAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63013,
|
|
||||||
Name: "gogoproto.equal_all",
|
|
||||||
Tag: "varint,63013,opt,name=equal_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_DescriptionAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63014,
|
|
||||||
Name: "gogoproto.description_all",
|
|
||||||
Tag: "varint,63014,opt,name=description_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_TestgenAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63015,
|
|
||||||
Name: "gogoproto.testgen_all",
|
|
||||||
Tag: "varint,63015,opt,name=testgen_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_BenchgenAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63016,
|
|
||||||
Name: "gogoproto.benchgen_all",
|
|
||||||
Tag: "varint,63016,opt,name=benchgen_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_MarshalerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63017,
|
|
||||||
Name: "gogoproto.marshaler_all",
|
|
||||||
Tag: "varint,63017,opt,name=marshaler_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_UnmarshalerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63018,
|
|
||||||
Name: "gogoproto.unmarshaler_all",
|
|
||||||
Tag: "varint,63018,opt,name=unmarshaler_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_StableMarshalerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63019,
|
|
||||||
Name: "gogoproto.stable_marshaler_all",
|
|
||||||
Tag: "varint,63019,opt,name=stable_marshaler_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_SizerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63020,
|
|
||||||
Name: "gogoproto.sizer_all",
|
|
||||||
Tag: "varint,63020,opt,name=sizer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoEnumStringerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63021,
|
|
||||||
Name: "gogoproto.goproto_enum_stringer_all",
|
|
||||||
Tag: "varint,63021,opt,name=goproto_enum_stringer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EnumStringerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63022,
|
|
||||||
Name: "gogoproto.enum_stringer_all",
|
|
||||||
Tag: "varint,63022,opt,name=enum_stringer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_UnsafeMarshalerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63023,
|
|
||||||
Name: "gogoproto.unsafe_marshaler_all",
|
|
||||||
Tag: "varint,63023,opt,name=unsafe_marshaler_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_UnsafeUnmarshalerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63024,
|
|
||||||
Name: "gogoproto.unsafe_unmarshaler_all",
|
|
||||||
Tag: "varint,63024,opt,name=unsafe_unmarshaler_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoExtensionsMapAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63025,
|
|
||||||
Name: "gogoproto.goproto_extensions_map_all",
|
|
||||||
Tag: "varint,63025,opt,name=goproto_extensions_map_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoUnrecognizedAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63026,
|
|
||||||
Name: "gogoproto.goproto_unrecognized_all",
|
|
||||||
Tag: "varint,63026,opt,name=goproto_unrecognized_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GogoprotoImport = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63027,
|
|
||||||
Name: "gogoproto.gogoproto_import",
|
|
||||||
Tag: "varint,63027,opt,name=gogoproto_import",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_ProtosizerAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63028,
|
|
||||||
Name: "gogoproto.protosizer_all",
|
|
||||||
Tag: "varint,63028,opt,name=protosizer_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_CompareAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63029,
|
|
||||||
Name: "gogoproto.compare_all",
|
|
||||||
Tag: "varint,63029,opt,name=compare_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_TypedeclAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63030,
|
|
||||||
Name: "gogoproto.typedecl_all",
|
|
||||||
Tag: "varint,63030,opt,name=typedecl_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_EnumdeclAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63031,
|
|
||||||
Name: "gogoproto.enumdecl_all",
|
|
||||||
Tag: "varint,63031,opt,name=enumdecl_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoRegistration = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63032,
|
|
||||||
Name: "gogoproto.goproto_registration",
|
|
||||||
Tag: "varint,63032,opt,name=goproto_registration",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_MessagenameAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63033,
|
|
||||||
Name: "gogoproto.messagename_all",
|
|
||||||
Tag: "varint,63033,opt,name=messagename_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoSizecacheAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63034,
|
|
||||||
Name: "gogoproto.goproto_sizecache_all",
|
|
||||||
Tag: "varint,63034,opt,name=goproto_sizecache_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoUnkeyedAll = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FileOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 63035,
|
|
||||||
Name: "gogoproto.goproto_unkeyed_all",
|
|
||||||
Tag: "varint,63035,opt,name=goproto_unkeyed_all",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoGetters = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64001,
|
|
||||||
Name: "gogoproto.goproto_getters",
|
|
||||||
Tag: "varint,64001,opt,name=goproto_getters",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoStringer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64003,
|
|
||||||
Name: "gogoproto.goproto_stringer",
|
|
||||||
Tag: "varint,64003,opt,name=goproto_stringer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_VerboseEqual = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64004,
|
|
||||||
Name: "gogoproto.verbose_equal",
|
|
||||||
Tag: "varint,64004,opt,name=verbose_equal",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Face = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64005,
|
|
||||||
Name: "gogoproto.face",
|
|
||||||
Tag: "varint,64005,opt,name=face",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Gostring = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64006,
|
|
||||||
Name: "gogoproto.gostring",
|
|
||||||
Tag: "varint,64006,opt,name=gostring",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Populate = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64007,
|
|
||||||
Name: "gogoproto.populate",
|
|
||||||
Tag: "varint,64007,opt,name=populate",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Stringer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 67008,
|
|
||||||
Name: "gogoproto.stringer",
|
|
||||||
Tag: "varint,67008,opt,name=stringer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Onlyone = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64009,
|
|
||||||
Name: "gogoproto.onlyone",
|
|
||||||
Tag: "varint,64009,opt,name=onlyone",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Equal = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64013,
|
|
||||||
Name: "gogoproto.equal",
|
|
||||||
Tag: "varint,64013,opt,name=equal",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Description = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64014,
|
|
||||||
Name: "gogoproto.description",
|
|
||||||
Tag: "varint,64014,opt,name=description",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Testgen = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64015,
|
|
||||||
Name: "gogoproto.testgen",
|
|
||||||
Tag: "varint,64015,opt,name=testgen",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Benchgen = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64016,
|
|
||||||
Name: "gogoproto.benchgen",
|
|
||||||
Tag: "varint,64016,opt,name=benchgen",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Marshaler = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64017,
|
|
||||||
Name: "gogoproto.marshaler",
|
|
||||||
Tag: "varint,64017,opt,name=marshaler",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Unmarshaler = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64018,
|
|
||||||
Name: "gogoproto.unmarshaler",
|
|
||||||
Tag: "varint,64018,opt,name=unmarshaler",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_StableMarshaler = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64019,
|
|
||||||
Name: "gogoproto.stable_marshaler",
|
|
||||||
Tag: "varint,64019,opt,name=stable_marshaler",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Sizer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64020,
|
|
||||||
Name: "gogoproto.sizer",
|
|
||||||
Tag: "varint,64020,opt,name=sizer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_UnsafeMarshaler = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64023,
|
|
||||||
Name: "gogoproto.unsafe_marshaler",
|
|
||||||
Tag: "varint,64023,opt,name=unsafe_marshaler",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_UnsafeUnmarshaler = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64024,
|
|
||||||
Name: "gogoproto.unsafe_unmarshaler",
|
|
||||||
Tag: "varint,64024,opt,name=unsafe_unmarshaler",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoExtensionsMap = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64025,
|
|
||||||
Name: "gogoproto.goproto_extensions_map",
|
|
||||||
Tag: "varint,64025,opt,name=goproto_extensions_map",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoUnrecognized = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64026,
|
|
||||||
Name: "gogoproto.goproto_unrecognized",
|
|
||||||
Tag: "varint,64026,opt,name=goproto_unrecognized",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Protosizer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64028,
|
|
||||||
Name: "gogoproto.protosizer",
|
|
||||||
Tag: "varint,64028,opt,name=protosizer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Compare = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64029,
|
|
||||||
Name: "gogoproto.compare",
|
|
||||||
Tag: "varint,64029,opt,name=compare",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Typedecl = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64030,
|
|
||||||
Name: "gogoproto.typedecl",
|
|
||||||
Tag: "varint,64030,opt,name=typedecl",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Messagename = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64033,
|
|
||||||
Name: "gogoproto.messagename",
|
|
||||||
Tag: "varint,64033,opt,name=messagename",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoSizecache = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64034,
|
|
||||||
Name: "gogoproto.goproto_sizecache",
|
|
||||||
Tag: "varint,64034,opt,name=goproto_sizecache",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_GoprotoUnkeyed = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.MessageOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 64035,
|
|
||||||
Name: "gogoproto.goproto_unkeyed",
|
|
||||||
Tag: "varint,64035,opt,name=goproto_unkeyed",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Nullable = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 65001,
|
|
||||||
Name: "gogoproto.nullable",
|
|
||||||
Tag: "varint,65001,opt,name=nullable",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Embed = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 65002,
|
|
||||||
Name: "gogoproto.embed",
|
|
||||||
Tag: "varint,65002,opt,name=embed",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Customtype = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65003,
|
|
||||||
Name: "gogoproto.customtype",
|
|
||||||
Tag: "bytes,65003,opt,name=customtype",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Customname = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65004,
|
|
||||||
Name: "gogoproto.customname",
|
|
||||||
Tag: "bytes,65004,opt,name=customname",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Jsontag = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65005,
|
|
||||||
Name: "gogoproto.jsontag",
|
|
||||||
Tag: "bytes,65005,opt,name=jsontag",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Moretags = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65006,
|
|
||||||
Name: "gogoproto.moretags",
|
|
||||||
Tag: "bytes,65006,opt,name=moretags",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Casttype = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65007,
|
|
||||||
Name: "gogoproto.casttype",
|
|
||||||
Tag: "bytes,65007,opt,name=casttype",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Castkey = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65008,
|
|
||||||
Name: "gogoproto.castkey",
|
|
||||||
Tag: "bytes,65008,opt,name=castkey",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Castvalue = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 65009,
|
|
||||||
Name: "gogoproto.castvalue",
|
|
||||||
Tag: "bytes,65009,opt,name=castvalue",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Stdtime = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 65010,
|
|
||||||
Name: "gogoproto.stdtime",
|
|
||||||
Tag: "varint,65010,opt,name=stdtime",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Stdduration = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 65011,
|
|
||||||
Name: "gogoproto.stdduration",
|
|
||||||
Tag: "varint,65011,opt,name=stdduration",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Wktpointer = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*descriptor.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 65012,
|
|
||||||
Name: "gogoproto.wktpointer",
|
|
||||||
Tag: "varint,65012,opt,name=wktpointer",
|
|
||||||
Filename: "gogo.proto",
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterExtension(E_GoprotoEnumPrefix)
|
|
||||||
proto.RegisterExtension(E_GoprotoEnumStringer)
|
|
||||||
proto.RegisterExtension(E_EnumStringer)
|
|
||||||
proto.RegisterExtension(E_EnumCustomname)
|
|
||||||
proto.RegisterExtension(E_Enumdecl)
|
|
||||||
proto.RegisterExtension(E_EnumvalueCustomname)
|
|
||||||
proto.RegisterExtension(E_GoprotoGettersAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoEnumPrefixAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoStringerAll)
|
|
||||||
proto.RegisterExtension(E_VerboseEqualAll)
|
|
||||||
proto.RegisterExtension(E_FaceAll)
|
|
||||||
proto.RegisterExtension(E_GostringAll)
|
|
||||||
proto.RegisterExtension(E_PopulateAll)
|
|
||||||
proto.RegisterExtension(E_StringerAll)
|
|
||||||
proto.RegisterExtension(E_OnlyoneAll)
|
|
||||||
proto.RegisterExtension(E_EqualAll)
|
|
||||||
proto.RegisterExtension(E_DescriptionAll)
|
|
||||||
proto.RegisterExtension(E_TestgenAll)
|
|
||||||
proto.RegisterExtension(E_BenchgenAll)
|
|
||||||
proto.RegisterExtension(E_MarshalerAll)
|
|
||||||
proto.RegisterExtension(E_UnmarshalerAll)
|
|
||||||
proto.RegisterExtension(E_StableMarshalerAll)
|
|
||||||
proto.RegisterExtension(E_SizerAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoEnumStringerAll)
|
|
||||||
proto.RegisterExtension(E_EnumStringerAll)
|
|
||||||
proto.RegisterExtension(E_UnsafeMarshalerAll)
|
|
||||||
proto.RegisterExtension(E_UnsafeUnmarshalerAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoExtensionsMapAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoUnrecognizedAll)
|
|
||||||
proto.RegisterExtension(E_GogoprotoImport)
|
|
||||||
proto.RegisterExtension(E_ProtosizerAll)
|
|
||||||
proto.RegisterExtension(E_CompareAll)
|
|
||||||
proto.RegisterExtension(E_TypedeclAll)
|
|
||||||
proto.RegisterExtension(E_EnumdeclAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoRegistration)
|
|
||||||
proto.RegisterExtension(E_MessagenameAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoSizecacheAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoUnkeyedAll)
|
|
||||||
proto.RegisterExtension(E_GoprotoGetters)
|
|
||||||
proto.RegisterExtension(E_GoprotoStringer)
|
|
||||||
proto.RegisterExtension(E_VerboseEqual)
|
|
||||||
proto.RegisterExtension(E_Face)
|
|
||||||
proto.RegisterExtension(E_Gostring)
|
|
||||||
proto.RegisterExtension(E_Populate)
|
|
||||||
proto.RegisterExtension(E_Stringer)
|
|
||||||
proto.RegisterExtension(E_Onlyone)
|
|
||||||
proto.RegisterExtension(E_Equal)
|
|
||||||
proto.RegisterExtension(E_Description)
|
|
||||||
proto.RegisterExtension(E_Testgen)
|
|
||||||
proto.RegisterExtension(E_Benchgen)
|
|
||||||
proto.RegisterExtension(E_Marshaler)
|
|
||||||
proto.RegisterExtension(E_Unmarshaler)
|
|
||||||
proto.RegisterExtension(E_StableMarshaler)
|
|
||||||
proto.RegisterExtension(E_Sizer)
|
|
||||||
proto.RegisterExtension(E_UnsafeMarshaler)
|
|
||||||
proto.RegisterExtension(E_UnsafeUnmarshaler)
|
|
||||||
proto.RegisterExtension(E_GoprotoExtensionsMap)
|
|
||||||
proto.RegisterExtension(E_GoprotoUnrecognized)
|
|
||||||
proto.RegisterExtension(E_Protosizer)
|
|
||||||
proto.RegisterExtension(E_Compare)
|
|
||||||
proto.RegisterExtension(E_Typedecl)
|
|
||||||
proto.RegisterExtension(E_Messagename)
|
|
||||||
proto.RegisterExtension(E_GoprotoSizecache)
|
|
||||||
proto.RegisterExtension(E_GoprotoUnkeyed)
|
|
||||||
proto.RegisterExtension(E_Nullable)
|
|
||||||
proto.RegisterExtension(E_Embed)
|
|
||||||
proto.RegisterExtension(E_Customtype)
|
|
||||||
proto.RegisterExtension(E_Customname)
|
|
||||||
proto.RegisterExtension(E_Jsontag)
|
|
||||||
proto.RegisterExtension(E_Moretags)
|
|
||||||
proto.RegisterExtension(E_Casttype)
|
|
||||||
proto.RegisterExtension(E_Castkey)
|
|
||||||
proto.RegisterExtension(E_Castvalue)
|
|
||||||
proto.RegisterExtension(E_Stdtime)
|
|
||||||
proto.RegisterExtension(E_Stdduration)
|
|
||||||
proto.RegisterExtension(E_Wktpointer)
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() { proto.RegisterFile("gogo.proto", fileDescriptor_592445b5231bc2b9) }
|
|
||||||
|
|
||||||
var fileDescriptor_592445b5231bc2b9 = []byte{
|
|
||||||
// 1328 bytes of a gzipped FileDescriptorProto
|
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x98, 0x49, 0x6f, 0x1c, 0x45,
|
|
||||||
0x14, 0x80, 0x85, 0x48, 0x64, 0x4f, 0x79, 0x8b, 0xc7, 0xc6, 0x84, 0x08, 0x44, 0xe0, 0xc4, 0xc9,
|
|
||||||
0x3e, 0x45, 0x28, 0x65, 0x45, 0x96, 0x63, 0x39, 0x56, 0x10, 0x0e, 0xc6, 0x89, 0xc3, 0x76, 0x18,
|
|
||||||
0xf5, 0xf4, 0x94, 0xdb, 0x8d, 0xbb, 0xbb, 0x9a, 0xee, 0xea, 0x10, 0xe7, 0x86, 0xc2, 0x22, 0x84,
|
|
||||||
0xd8, 0x91, 0x20, 0x21, 0x09, 0x04, 0xc4, 0xbe, 0x86, 0x7d, 0xb9, 0x70, 0x61, 0xb9, 0xf2, 0x1f,
|
|
||||||
0xb8, 0x00, 0x66, 0xf7, 0xcd, 0x17, 0xf4, 0xba, 0xdf, 0xeb, 0xa9, 0x69, 0x8f, 0x54, 0x35, 0xb7,
|
|
||||||
0xf6, 0xb8, 0xbe, 0x6f, 0xaa, 0xdf, 0xeb, 0x7a, 0xef, 0x4d, 0x33, 0xe6, 0x49, 0x4f, 0x4e, 0xc6,
|
|
||||||
0x89, 0x54, 0xb2, 0x5e, 0x83, 0xeb, 0xfc, 0x72, 0xdf, 0x7e, 0x4f, 0x4a, 0x2f, 0x10, 0x53, 0xf9,
|
|
||||||
0x5f, 0xcd, 0x6c, 0x75, 0xaa, 0x25, 0x52, 0x37, 0xf1, 0x63, 0x25, 0x93, 0x62, 0x31, 0x3f, 0xc6,
|
|
||||||
0xc6, 0x70, 0x71, 0x43, 0x44, 0x59, 0xd8, 0x88, 0x13, 0xb1, 0xea, 0x9f, 0xae, 0x5f, 0x3f, 0x59,
|
|
||||||
0x90, 0x93, 0x44, 0x4e, 0xce, 0x47, 0x59, 0x78, 0x47, 0xac, 0x7c, 0x19, 0xa5, 0x7b, 0xaf, 0xfc,
|
|
||||||
0x72, 0xf5, 0xfe, 0xab, 0x6e, 0xe9, 0x5f, 0x1e, 0x45, 0x14, 0xfe, 0xb7, 0x94, 0x83, 0x7c, 0x99,
|
|
||||||
0x5d, 0xd3, 0xe1, 0x4b, 0x55, 0xe2, 0x47, 0x9e, 0x48, 0x0c, 0xc6, 0xef, 0xd1, 0x38, 0xa6, 0x19,
|
|
||||||
0x8f, 0x23, 0xca, 0xe7, 0xd8, 0x50, 0x2f, 0xae, 0x1f, 0xd0, 0x35, 0x28, 0x74, 0xc9, 0x02, 0x1b,
|
|
||||||
0xc9, 0x25, 0x6e, 0x96, 0x2a, 0x19, 0x46, 0x4e, 0x28, 0x0c, 0x9a, 0x1f, 0x73, 0x4d, 0x6d, 0x79,
|
|
||||||
0x18, 0xb0, 0xb9, 0x92, 0xe2, 0x9c, 0xf5, 0xc3, 0x27, 0x2d, 0xe1, 0x06, 0x06, 0xc3, 0x4f, 0xb8,
|
|
||||||
0x91, 0x72, 0x3d, 0x3f, 0xc9, 0xc6, 0xe1, 0xfa, 0x94, 0x13, 0x64, 0x42, 0xdf, 0xc9, 0x4d, 0x5d,
|
|
||||||
0x3d, 0x27, 0x61, 0x19, 0xc9, 0x7e, 0x3e, 0xbb, 0x2b, 0xdf, 0xce, 0x58, 0x29, 0xd0, 0xf6, 0xa4,
|
|
||||||
0x65, 0xd1, 0x13, 0x4a, 0x89, 0x24, 0x6d, 0x38, 0x41, 0xb7, 0xed, 0x1d, 0xf1, 0x83, 0xd2, 0x78,
|
|
||||||
0x6e, 0xb3, 0x33, 0x8b, 0x0b, 0x05, 0x39, 0x1b, 0x04, 0x7c, 0x85, 0x5d, 0xdb, 0xe5, 0xa9, 0xb0,
|
|
||||||
0x70, 0x9e, 0x47, 0xe7, 0xf8, 0x8e, 0x27, 0x03, 0xb4, 0x4b, 0x8c, 0x3e, 0x2f, 0x73, 0x69, 0xe1,
|
|
||||||
0x7c, 0x19, 0x9d, 0x75, 0x64, 0x29, 0xa5, 0x60, 0xbc, 0x8d, 0x8d, 0x9e, 0x12, 0x49, 0x53, 0xa6,
|
|
||||||
0xa2, 0x21, 0x1e, 0xc8, 0x9c, 0xc0, 0x42, 0x77, 0x01, 0x75, 0x23, 0x08, 0xce, 0x03, 0x07, 0xae,
|
|
||||||
0x83, 0xac, 0x7f, 0xd5, 0x71, 0x85, 0x85, 0xe2, 0x22, 0x2a, 0xfa, 0x60, 0x3d, 0xa0, 0xb3, 0x6c,
|
|
||||||
0xd0, 0x93, 0xc5, 0x2d, 0x59, 0xe0, 0x97, 0x10, 0x1f, 0x20, 0x06, 0x15, 0xb1, 0x8c, 0xb3, 0xc0,
|
|
||||||
0x51, 0x36, 0x3b, 0x78, 0x85, 0x14, 0xc4, 0xa0, 0xa2, 0x87, 0xb0, 0xbe, 0x4a, 0x8a, 0x54, 0x8b,
|
|
||||||
0xe7, 0x0c, 0x1b, 0x90, 0x51, 0xb0, 0x21, 0x23, 0x9b, 0x4d, 0x5c, 0x46, 0x03, 0x43, 0x04, 0x04,
|
|
||||||
0xd3, 0xac, 0x66, 0x9b, 0x88, 0x37, 0x36, 0xe9, 0x78, 0x50, 0x06, 0x16, 0xd8, 0x08, 0x15, 0x28,
|
|
||||||
0x5f, 0x46, 0x16, 0x8a, 0x37, 0x51, 0x31, 0xac, 0x61, 0x78, 0x1b, 0x4a, 0xa4, 0xca, 0x13, 0x36,
|
|
||||||
0x92, 0xb7, 0xe8, 0x36, 0x10, 0xc1, 0x50, 0x36, 0x45, 0xe4, 0xae, 0xd9, 0x19, 0xde, 0xa6, 0x50,
|
|
||||||
0x12, 0x03, 0x8a, 0x39, 0x36, 0x14, 0x3a, 0x49, 0xba, 0xe6, 0x04, 0x56, 0xe9, 0x78, 0x07, 0x1d,
|
|
||||||
0x83, 0x25, 0x84, 0x11, 0xc9, 0xa2, 0x5e, 0x34, 0xef, 0x52, 0x44, 0x34, 0x0c, 0x8f, 0x5e, 0xaa,
|
|
||||||
0x9c, 0x66, 0x20, 0x1a, 0xbd, 0xd8, 0xde, 0xa3, 0xa3, 0x57, 0xb0, 0x8b, 0xba, 0x71, 0x9a, 0xd5,
|
|
||||||
0x52, 0xff, 0x8c, 0x95, 0xe6, 0x7d, 0xca, 0x74, 0x0e, 0x00, 0x7c, 0x0f, 0xbb, 0xae, 0x6b, 0x9b,
|
|
||||||
0xb0, 0x90, 0x7d, 0x80, 0xb2, 0x89, 0x2e, 0xad, 0x02, 0x4b, 0x42, 0xaf, 0xca, 0x0f, 0xa9, 0x24,
|
|
||||||
0x88, 0x8a, 0x6b, 0x89, 0x8d, 0x67, 0x51, 0xea, 0xac, 0xf6, 0x16, 0xb5, 0x8f, 0x28, 0x6a, 0x05,
|
|
||||||
0xdb, 0x11, 0xb5, 0x13, 0x6c, 0x02, 0x8d, 0xbd, 0xe5, 0xf5, 0x63, 0x2a, 0xac, 0x05, 0xbd, 0xd2,
|
|
||||||
0x99, 0xdd, 0xfb, 0xd8, 0xbe, 0x32, 0x9c, 0xa7, 0x95, 0x88, 0x52, 0x60, 0x1a, 0xa1, 0x13, 0x5b,
|
|
||||||
0x98, 0xaf, 0xa0, 0x99, 0x2a, 0xfe, 0x7c, 0x29, 0x58, 0x74, 0x62, 0x90, 0xdf, 0xcd, 0xf6, 0x92,
|
|
||||||
0x3c, 0x8b, 0x12, 0xe1, 0x4a, 0x2f, 0xf2, 0xcf, 0x88, 0x96, 0x85, 0xfa, 0x93, 0x4a, 0xaa, 0x56,
|
|
||||||
0x34, 0x1c, 0xcc, 0x47, 0xd9, 0x9e, 0x72, 0x56, 0x69, 0xf8, 0x61, 0x2c, 0x13, 0x65, 0x30, 0x7e,
|
|
||||||
0x4a, 0x99, 0x2a, 0xb9, 0xa3, 0x39, 0xc6, 0xe7, 0xd9, 0x70, 0xfe, 0xa7, 0xed, 0x23, 0xf9, 0x19,
|
|
||||||
0x8a, 0x86, 0xda, 0x14, 0x16, 0x0e, 0x57, 0x86, 0xb1, 0x93, 0xd8, 0xd4, 0xbf, 0xcf, 0xa9, 0x70,
|
|
||||||
0x20, 0x82, 0x85, 0x43, 0x6d, 0xc4, 0x02, 0xba, 0xbd, 0x85, 0xe1, 0x0b, 0x2a, 0x1c, 0xc4, 0xa0,
|
|
||||||
0x82, 0x06, 0x06, 0x0b, 0xc5, 0x97, 0xa4, 0x20, 0x06, 0x14, 0x77, 0xb6, 0x1b, 0x6d, 0x22, 0x3c,
|
|
||||||
0x3f, 0x55, 0x89, 0x03, 0xab, 0x0d, 0xaa, 0xaf, 0x36, 0x3b, 0x87, 0xb0, 0x65, 0x0d, 0x85, 0x4a,
|
|
||||||
0x14, 0x8a, 0x34, 0x75, 0x3c, 0x01, 0x13, 0x87, 0xc5, 0xc6, 0xbe, 0xa6, 0x4a, 0xa4, 0x61, 0xb0,
|
|
||||||
0x37, 0x6d, 0x42, 0x84, 0xb0, 0xbb, 0x8e, 0xbb, 0x66, 0xa3, 0xfb, 0xa6, 0xb2, 0xb9, 0xe3, 0xc4,
|
|
||||||
0x82, 0x53, 0x9b, 0x7f, 0xb2, 0x68, 0x5d, 0x6c, 0x58, 0x3d, 0x9d, 0xdf, 0x56, 0xe6, 0x9f, 0x95,
|
|
||||||
0x82, 0x2c, 0x6a, 0xc8, 0x48, 0x65, 0x9e, 0xaa, 0xdf, 0xb8, 0xc3, 0xb5, 0x58, 0xdc, 0x17, 0xe9,
|
|
||||||
0x1e, 0xda, 0xc2, 0xfb, 0xed, 0x1c, 0xa7, 0xf8, 0xed, 0xf0, 0x90, 0x77, 0x0e, 0x3d, 0x66, 0xd9,
|
|
||||||
0xd9, 0xad, 0xf2, 0x39, 0xef, 0x98, 0x79, 0xf8, 0x11, 0x36, 0xd4, 0x31, 0xf0, 0x98, 0x55, 0x0f,
|
|
||||||
0xa3, 0x6a, 0x50, 0x9f, 0x77, 0xf8, 0x01, 0xb6, 0x0b, 0x86, 0x17, 0x33, 0xfe, 0x08, 0xe2, 0xf9,
|
|
||||||
0x72, 0x7e, 0x88, 0xf5, 0xd3, 0xd0, 0x62, 0x46, 0x1f, 0x45, 0xb4, 0x44, 0x00, 0xa7, 0x81, 0xc5,
|
|
||||||
0x8c, 0x3f, 0x46, 0x38, 0x21, 0x80, 0xdb, 0x87, 0xf0, 0xbb, 0x27, 0x76, 0x61, 0xd3, 0xa1, 0xd8,
|
|
||||||
0x4d, 0xb3, 0x3e, 0x9c, 0x54, 0xcc, 0xf4, 0xe3, 0xf8, 0xe5, 0x44, 0xf0, 0x5b, 0xd9, 0x6e, 0xcb,
|
|
||||||
0x80, 0x3f, 0x89, 0x68, 0xb1, 0x9e, 0xcf, 0xb1, 0x01, 0x6d, 0x3a, 0x31, 0xe3, 0x4f, 0x21, 0xae,
|
|
||||||
0x53, 0xb0, 0x75, 0x9c, 0x4e, 0xcc, 0x82, 0xa7, 0x69, 0xeb, 0x48, 0x40, 0xd8, 0x68, 0x30, 0x31,
|
|
||||||
0xd3, 0xcf, 0x50, 0xd4, 0x09, 0xe1, 0x33, 0xac, 0x56, 0x36, 0x1b, 0x33, 0xff, 0x2c, 0xf2, 0x6d,
|
|
||||||
0x06, 0x22, 0xa0, 0x35, 0x3b, 0xb3, 0xe2, 0x39, 0x8a, 0x80, 0x46, 0xc1, 0x31, 0xaa, 0x0e, 0x30,
|
|
||||||
0x66, 0xd3, 0xf3, 0x74, 0x8c, 0x2a, 0xf3, 0x0b, 0x64, 0x33, 0xaf, 0xf9, 0x66, 0xc5, 0x0b, 0x94,
|
|
||||||
0xcd, 0x7c, 0x3d, 0x6c, 0xa3, 0x3a, 0x11, 0x98, 0x1d, 0x2f, 0xd2, 0x36, 0x2a, 0x03, 0x01, 0x5f,
|
|
||||||
0x62, 0xf5, 0x9d, 0xd3, 0x80, 0xd9, 0xf7, 0x12, 0xfa, 0x46, 0x77, 0x0c, 0x03, 0xfc, 0x2e, 0x36,
|
|
||||||
0xd1, 0x7d, 0x12, 0x30, 0x5b, 0xcf, 0x6d, 0x55, 0x7e, 0xbb, 0xe9, 0x83, 0x00, 0x3f, 0xd1, 0x6e,
|
|
||||||
0x29, 0xfa, 0x14, 0x60, 0xd6, 0x9e, 0xdf, 0xea, 0x2c, 0xdc, 0xfa, 0x10, 0xc0, 0x67, 0x19, 0x6b,
|
|
||||||
0x37, 0x60, 0xb3, 0xeb, 0x02, 0xba, 0x34, 0x08, 0x8e, 0x06, 0xf6, 0x5f, 0x33, 0x7f, 0x91, 0x8e,
|
|
||||||
0x06, 0x12, 0x70, 0x34, 0xa8, 0xf5, 0x9a, 0xe9, 0x4b, 0x74, 0x34, 0x08, 0x81, 0x27, 0x5b, 0xeb,
|
|
||||||
0x6e, 0x66, 0xc3, 0x65, 0x7a, 0xb2, 0x35, 0x8a, 0x1f, 0x63, 0xa3, 0x3b, 0x1a, 0xa2, 0x59, 0xf5,
|
|
||||||
0x1a, 0xaa, 0xf6, 0x54, 0xfb, 0xa1, 0xde, 0xbc, 0xb0, 0x19, 0x9a, 0x6d, 0xaf, 0x57, 0x9a, 0x17,
|
|
||||||
0xf6, 0x42, 0x3e, 0xcd, 0xfa, 0xa3, 0x2c, 0x08, 0xe0, 0xf0, 0xd4, 0x6f, 0xe8, 0xd2, 0x4d, 0x45,
|
|
||||||
0xd0, 0x22, 0xc5, 0xaf, 0xdb, 0x18, 0x1d, 0x02, 0xf8, 0x01, 0xb6, 0x5b, 0x84, 0x4d, 0xd1, 0x32,
|
|
||||||
0x91, 0xbf, 0x6d, 0x53, 0xc1, 0x84, 0xd5, 0x7c, 0x86, 0xb1, 0xe2, 0xd5, 0x08, 0x84, 0xd9, 0xc4,
|
|
||||||
0xfe, 0xbe, 0x5d, 0xbc, 0xa5, 0xd1, 0x90, 0xb6, 0x20, 0x4f, 0x8a, 0x41, 0xb0, 0xd9, 0x29, 0xc8,
|
|
||||||
0x33, 0x72, 0x90, 0xf5, 0xdd, 0x9f, 0xca, 0x48, 0x39, 0x9e, 0x89, 0xfe, 0x03, 0x69, 0x5a, 0x0f,
|
|
||||||
0x01, 0x0b, 0x65, 0x22, 0x94, 0xe3, 0xa5, 0x26, 0xf6, 0x4f, 0x64, 0x4b, 0x00, 0x60, 0xd7, 0x49,
|
|
||||||
0x95, 0xcd, 0x7d, 0xff, 0x45, 0x30, 0x01, 0xb0, 0x69, 0xb8, 0x5e, 0x17, 0x1b, 0x26, 0xf6, 0x6f,
|
|
||||||
0xda, 0x34, 0xae, 0xe7, 0x87, 0x58, 0x0d, 0x2e, 0xf3, 0xb7, 0x4a, 0x26, 0xf8, 0x1f, 0x84, 0xdb,
|
|
||||||
0x04, 0x7c, 0x73, 0xaa, 0x5a, 0xca, 0x37, 0x07, 0xfb, 0x5f, 0xcc, 0x34, 0xad, 0xe7, 0xb3, 0x6c,
|
|
||||||
0x20, 0x55, 0xad, 0x56, 0x86, 0xf3, 0xa9, 0x01, 0xff, 0x6f, 0xbb, 0x7c, 0x65, 0x51, 0x32, 0x90,
|
|
||||||
0xed, 0x07, 0xd7, 0x55, 0x2c, 0xfd, 0x48, 0x89, 0xc4, 0x64, 0xd8, 0x42, 0x83, 0x86, 0x1c, 0x9e,
|
|
||||||
0x67, 0x63, 0xae, 0x0c, 0xab, 0xdc, 0x61, 0xb6, 0x20, 0x17, 0xe4, 0x52, 0x5e, 0x67, 0xee, 0xbd,
|
|
||||||
0xd9, 0xf3, 0xd5, 0x5a, 0xd6, 0x9c, 0x74, 0x65, 0x38, 0x05, 0xbf, 0x3c, 0xda, 0x2f, 0x54, 0xcb,
|
|
||||||
0xdf, 0x21, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0x9c, 0xaf, 0x70, 0x4e, 0x83, 0x15, 0x00, 0x00,
|
|
||||||
}
|
|
45
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden
generated
vendored
45
vendor/github.com/gogo/protobuf/gogoproto/gogo.pb.golden
generated
vendored
@ -1,45 +0,0 @@
|
|||||||
// Code generated by protoc-gen-go.
|
|
||||||
// source: gogo.proto
|
|
||||||
// DO NOT EDIT!
|
|
||||||
|
|
||||||
package gogoproto
|
|
||||||
|
|
||||||
import proto "github.com/gogo/protobuf/proto"
|
|
||||||
import json "encoding/json"
|
|
||||||
import math "math"
|
|
||||||
import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
|
|
||||||
// Reference proto, json, and math imports to suppress error if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = &json.SyntaxError{}
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
var E_Nullable = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*google_protobuf.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 51235,
|
|
||||||
Name: "gogoproto.nullable",
|
|
||||||
Tag: "varint,51235,opt,name=nullable",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Embed = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*google_protobuf.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*bool)(nil),
|
|
||||||
Field: 51236,
|
|
||||||
Name: "gogoproto.embed",
|
|
||||||
Tag: "varint,51236,opt,name=embed",
|
|
||||||
}
|
|
||||||
|
|
||||||
var E_Customtype = &proto.ExtensionDesc{
|
|
||||||
ExtendedType: (*google_protobuf.FieldOptions)(nil),
|
|
||||||
ExtensionType: (*string)(nil),
|
|
||||||
Field: 51237,
|
|
||||||
Name: "gogoproto.customtype",
|
|
||||||
Tag: "bytes,51237,opt,name=customtype",
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
proto.RegisterExtension(E_Nullable)
|
|
||||||
proto.RegisterExtension(E_Embed)
|
|
||||||
proto.RegisterExtension(E_Customtype)
|
|
||||||
}
|
|
144
vendor/github.com/gogo/protobuf/gogoproto/gogo.proto
generated
vendored
144
vendor/github.com/gogo/protobuf/gogoproto/gogo.proto
generated
vendored
@ -1,144 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
syntax = "proto2";
|
|
||||||
package gogoproto;
|
|
||||||
|
|
||||||
import "google/protobuf/descriptor.proto";
|
|
||||||
|
|
||||||
option java_package = "com.google.protobuf";
|
|
||||||
option java_outer_classname = "GoGoProtos";
|
|
||||||
option go_package = "github.com/gogo/protobuf/gogoproto";
|
|
||||||
|
|
||||||
extend google.protobuf.EnumOptions {
|
|
||||||
optional bool goproto_enum_prefix = 62001;
|
|
||||||
optional bool goproto_enum_stringer = 62021;
|
|
||||||
optional bool enum_stringer = 62022;
|
|
||||||
optional string enum_customname = 62023;
|
|
||||||
optional bool enumdecl = 62024;
|
|
||||||
}
|
|
||||||
|
|
||||||
extend google.protobuf.EnumValueOptions {
|
|
||||||
optional string enumvalue_customname = 66001;
|
|
||||||
}
|
|
||||||
|
|
||||||
extend google.protobuf.FileOptions {
|
|
||||||
optional bool goproto_getters_all = 63001;
|
|
||||||
optional bool goproto_enum_prefix_all = 63002;
|
|
||||||
optional bool goproto_stringer_all = 63003;
|
|
||||||
optional bool verbose_equal_all = 63004;
|
|
||||||
optional bool face_all = 63005;
|
|
||||||
optional bool gostring_all = 63006;
|
|
||||||
optional bool populate_all = 63007;
|
|
||||||
optional bool stringer_all = 63008;
|
|
||||||
optional bool onlyone_all = 63009;
|
|
||||||
|
|
||||||
optional bool equal_all = 63013;
|
|
||||||
optional bool description_all = 63014;
|
|
||||||
optional bool testgen_all = 63015;
|
|
||||||
optional bool benchgen_all = 63016;
|
|
||||||
optional bool marshaler_all = 63017;
|
|
||||||
optional bool unmarshaler_all = 63018;
|
|
||||||
optional bool stable_marshaler_all = 63019;
|
|
||||||
|
|
||||||
optional bool sizer_all = 63020;
|
|
||||||
|
|
||||||
optional bool goproto_enum_stringer_all = 63021;
|
|
||||||
optional bool enum_stringer_all = 63022;
|
|
||||||
|
|
||||||
optional bool unsafe_marshaler_all = 63023;
|
|
||||||
optional bool unsafe_unmarshaler_all = 63024;
|
|
||||||
|
|
||||||
optional bool goproto_extensions_map_all = 63025;
|
|
||||||
optional bool goproto_unrecognized_all = 63026;
|
|
||||||
optional bool gogoproto_import = 63027;
|
|
||||||
optional bool protosizer_all = 63028;
|
|
||||||
optional bool compare_all = 63029;
|
|
||||||
optional bool typedecl_all = 63030;
|
|
||||||
optional bool enumdecl_all = 63031;
|
|
||||||
|
|
||||||
optional bool goproto_registration = 63032;
|
|
||||||
optional bool messagename_all = 63033;
|
|
||||||
|
|
||||||
optional bool goproto_sizecache_all = 63034;
|
|
||||||
optional bool goproto_unkeyed_all = 63035;
|
|
||||||
}
|
|
||||||
|
|
||||||
extend google.protobuf.MessageOptions {
|
|
||||||
optional bool goproto_getters = 64001;
|
|
||||||
optional bool goproto_stringer = 64003;
|
|
||||||
optional bool verbose_equal = 64004;
|
|
||||||
optional bool face = 64005;
|
|
||||||
optional bool gostring = 64006;
|
|
||||||
optional bool populate = 64007;
|
|
||||||
optional bool stringer = 67008;
|
|
||||||
optional bool onlyone = 64009;
|
|
||||||
|
|
||||||
optional bool equal = 64013;
|
|
||||||
optional bool description = 64014;
|
|
||||||
optional bool testgen = 64015;
|
|
||||||
optional bool benchgen = 64016;
|
|
||||||
optional bool marshaler = 64017;
|
|
||||||
optional bool unmarshaler = 64018;
|
|
||||||
optional bool stable_marshaler = 64019;
|
|
||||||
|
|
||||||
optional bool sizer = 64020;
|
|
||||||
|
|
||||||
optional bool unsafe_marshaler = 64023;
|
|
||||||
optional bool unsafe_unmarshaler = 64024;
|
|
||||||
|
|
||||||
optional bool goproto_extensions_map = 64025;
|
|
||||||
optional bool goproto_unrecognized = 64026;
|
|
||||||
|
|
||||||
optional bool protosizer = 64028;
|
|
||||||
optional bool compare = 64029;
|
|
||||||
|
|
||||||
optional bool typedecl = 64030;
|
|
||||||
|
|
||||||
optional bool messagename = 64033;
|
|
||||||
|
|
||||||
optional bool goproto_sizecache = 64034;
|
|
||||||
optional bool goproto_unkeyed = 64035;
|
|
||||||
}
|
|
||||||
|
|
||||||
extend google.protobuf.FieldOptions {
|
|
||||||
optional bool nullable = 65001;
|
|
||||||
optional bool embed = 65002;
|
|
||||||
optional string customtype = 65003;
|
|
||||||
optional string customname = 65004;
|
|
||||||
optional string jsontag = 65005;
|
|
||||||
optional string moretags = 65006;
|
|
||||||
optional string casttype = 65007;
|
|
||||||
optional string castkey = 65008;
|
|
||||||
optional string castvalue = 65009;
|
|
||||||
|
|
||||||
optional bool stdtime = 65010;
|
|
||||||
optional bool stdduration = 65011;
|
|
||||||
optional bool wktpointer = 65012;
|
|
||||||
|
|
||||||
}
|
|
415
vendor/github.com/gogo/protobuf/gogoproto/helper.go
generated
vendored
415
vendor/github.com/gogo/protobuf/gogoproto/helper.go
generated
vendored
@ -1,415 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package gogoproto
|
|
||||||
|
|
||||||
import google_protobuf "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
import proto "github.com/gogo/protobuf/proto"
|
|
||||||
|
|
||||||
func IsEmbed(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Embed, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsNullable(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Nullable, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdTime(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Stdtime, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdDuration(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Stdduration, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdDouble(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.DoubleValue"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdFloat(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.FloatValue"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdInt64(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int64Value"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdUInt64(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt64Value"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdInt32(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.Int32Value"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdUInt32(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.UInt32Value"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdBool(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BoolValue"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdString(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.StringValue"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdBytes(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false) && *field.TypeName == ".google.protobuf.BytesValue"
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStdType(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return (IsStdTime(field) || IsStdDuration(field) ||
|
|
||||||
IsStdDouble(field) || IsStdFloat(field) ||
|
|
||||||
IsStdInt64(field) || IsStdUInt64(field) ||
|
|
||||||
IsStdInt32(field) || IsStdUInt32(field) ||
|
|
||||||
IsStdBool(field) ||
|
|
||||||
IsStdString(field) || IsStdBytes(field))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsWktPtr(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(field.Options, E_Wktpointer, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func NeedsNilCheck(proto3 bool, field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
nullable := IsNullable(field)
|
|
||||||
if field.IsMessage() || IsCustomType(field) {
|
|
||||||
return nullable
|
|
||||||
}
|
|
||||||
if proto3 {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return nullable || *field.Type == google_protobuf.FieldDescriptorProto_TYPE_BYTES
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsCustomType(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
typ := GetCustomType(field)
|
|
||||||
if len(typ) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsCastType(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
typ := GetCastType(field)
|
|
||||||
if len(typ) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsCastKey(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
typ := GetCastKey(field)
|
|
||||||
if len(typ) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsCastValue(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
typ := GetCastValue(field)
|
|
||||||
if len(typ) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasEnumDecl(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(enum.Options, E_Enumdecl, proto.GetBoolExtension(file.Options, E_EnumdeclAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasTypeDecl(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Typedecl, proto.GetBoolExtension(file.Options, E_TypedeclAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCustomType(field *google_protobuf.FieldDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Customtype)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCastType(field *google_protobuf.FieldDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Casttype)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCastKey(field *google_protobuf.FieldDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Castkey)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCastValue(field *google_protobuf.FieldDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Castvalue)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsCustomName(field *google_protobuf.FieldDescriptorProto) bool {
|
|
||||||
name := GetCustomName(field)
|
|
||||||
if len(name) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsEnumCustomName(field *google_protobuf.EnumDescriptorProto) bool {
|
|
||||||
name := GetEnumCustomName(field)
|
|
||||||
if len(name) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) bool {
|
|
||||||
name := GetEnumValueCustomName(field)
|
|
||||||
if len(name) > 0 {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCustomName(field *google_protobuf.FieldDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Customname)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetEnumCustomName(field *google_protobuf.EnumDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_EnumCustomname)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetEnumValueCustomName(field *google_protobuf.EnumValueDescriptorProto) string {
|
|
||||||
if field == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_EnumvalueCustomname)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return *(v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetJsonTag(field *google_protobuf.FieldDescriptorProto) *string {
|
|
||||||
if field == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Jsontag)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return (v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetMoreTags(field *google_protobuf.FieldDescriptorProto) *string {
|
|
||||||
if field == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if field.Options != nil {
|
|
||||||
v, err := proto.GetExtension(field.Options, E_Moretags)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
return (v.(*string))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type EnableFunc func(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool
|
|
||||||
|
|
||||||
func EnabledGoEnumPrefix(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(enum.Options, E_GoprotoEnumPrefix, proto.GetBoolExtension(file.Options, E_GoprotoEnumPrefixAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func EnabledGoStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoStringer, proto.GetBoolExtension(file.Options, E_GoprotoStringerAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasGoGetters(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoGetters, proto.GetBoolExtension(file.Options, E_GoprotoGettersAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsUnion(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Onlyone, proto.GetBoolExtension(file.Options, E_OnlyoneAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasGoString(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Gostring, proto.GetBoolExtension(file.Options, E_GostringAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Equal, proto.GetBoolExtension(file.Options, E_EqualAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasVerboseEqual(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_VerboseEqual, proto.GetBoolExtension(file.Options, E_VerboseEqualAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStringer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Stringer, proto.GetBoolExtension(file.Options, E_StringerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsFace(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Face, proto.GetBoolExtension(file.Options, E_FaceAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasDescription(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Description, proto.GetBoolExtension(file.Options, E_DescriptionAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasPopulate(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Populate, proto.GetBoolExtension(file.Options, E_PopulateAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasTestGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Testgen, proto.GetBoolExtension(file.Options, E_TestgenAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasBenchGen(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Benchgen, proto.GetBoolExtension(file.Options, E_BenchgenAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Marshaler, proto.GetBoolExtension(file.Options, E_MarshalerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Unmarshaler, proto.GetBoolExtension(file.Options, E_UnmarshalerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsStableMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_StableMarshaler, proto.GetBoolExtension(file.Options, E_StableMarshalerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Sizer, proto.GetBoolExtension(file.Options, E_SizerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsProtoSizer(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Protosizer, proto.GetBoolExtension(file.Options, E_ProtosizerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsGoEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(enum.Options, E_GoprotoEnumStringer, proto.GetBoolExtension(file.Options, E_GoprotoEnumStringerAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsEnumStringer(file *google_protobuf.FileDescriptorProto, enum *google_protobuf.EnumDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(enum.Options, E_EnumStringer, proto.GetBoolExtension(file.Options, E_EnumStringerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsUnsafeMarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_UnsafeMarshaler, proto.GetBoolExtension(file.Options, E_UnsafeMarshalerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsUnsafeUnmarshaler(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_UnsafeUnmarshaler, proto.GetBoolExtension(file.Options, E_UnsafeUnmarshalerAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasExtensionsMap(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoExtensionsMap, proto.GetBoolExtension(file.Options, E_GoprotoExtensionsMapAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasUnrecognized(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoUnrecognized, proto.GetBoolExtension(file.Options, E_GoprotoUnrecognizedAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsProto3(file *google_protobuf.FileDescriptorProto) bool {
|
|
||||||
return file.GetSyntax() == "proto3"
|
|
||||||
}
|
|
||||||
|
|
||||||
func ImportsGoGoProto(file *google_protobuf.FileDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(file.Options, E_GogoprotoImport, true)
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasCompare(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Compare, proto.GetBoolExtension(file.Options, E_CompareAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func RegistersGolangProto(file *google_protobuf.FileDescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(file.Options, E_GoprotoRegistration, false)
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasMessageName(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_Messagename, proto.GetBoolExtension(file.Options, E_MessagenameAll, false))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasSizecache(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoSizecache, proto.GetBoolExtension(file.Options, E_GoprotoSizecacheAll, true))
|
|
||||||
}
|
|
||||||
|
|
||||||
func HasUnkeyed(file *google_protobuf.FileDescriptorProto, message *google_protobuf.DescriptorProto) bool {
|
|
||||||
return proto.GetBoolExtension(message.Options, E_GoprotoUnkeyed, proto.GetBoolExtension(file.Options, E_GoprotoUnkeyedAll, true))
|
|
||||||
}
|
|
580
vendor/github.com/gogo/protobuf/plugin/compare/compare.go
generated
vendored
580
vendor/github.com/gogo/protobuf/plugin/compare/compare.go
generated
vendored
@ -1,580 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package compare
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"github.com/gogo/protobuf/vanity"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
fmtPkg generator.Single
|
|
||||||
bytesPkg generator.Single
|
|
||||||
sortkeysPkg generator.Single
|
|
||||||
protoPkg generator.Single
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "compare"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.fmtPkg = p.NewImport("fmt")
|
|
||||||
p.bytesPkg = p.NewImport("bytes")
|
|
||||||
p.sortkeysPkg = p.NewImport("github.com/gogo/protobuf/sortkeys")
|
|
||||||
p.protoPkg = p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
|
|
||||||
for _, msg := range file.Messages() {
|
|
||||||
if msg.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.HasCompare(file.FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
p.generateMessage(file, msg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateNullableField(fieldname string) {
|
|
||||||
p.P(`if this.`, fieldname, ` != nil && that1.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if *this.`, fieldname, ` != *that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if *this.`, fieldname, ` < *that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if that1.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateMsgNullAndTypeCheck(ccTypeName string) {
|
|
||||||
p.P(`if that == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
p.P(`that1, ok := that.(*`, ccTypeName, `)`)
|
|
||||||
p.P(`if !ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`that2, ok := that.(`, ccTypeName, `)`)
|
|
||||||
p.P(`if ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`that1 = &that2`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if that1 == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateField(file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
repeated := field.IsRepeated()
|
|
||||||
ctype := gogoproto.IsCustomType(field)
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
// oneof := field.OneofIndex != nil
|
|
||||||
if !repeated {
|
|
||||||
if ctype {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if that1.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if c := this.`, fieldname, `.Compare(*that1.`, fieldname, `); c != 0 {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if c := this.`, fieldname, `.Compare(that1.`, fieldname, `); c != 0 {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if c := this.`, fieldname, `.Compare(that1.`, fieldname, `); c != 0 {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if c := this.`, fieldname, `.Compare(&that1.`, fieldname, `); c != 0 {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if field.IsBytes() {
|
|
||||||
p.P(`if c := `, p.bytesPkg.Use(), `.Compare(this.`, fieldname, `, that1.`, fieldname, `); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if field.IsString() {
|
|
||||||
if nullable && !proto3 {
|
|
||||||
p.generateNullableField(fieldname)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` < that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else if field.IsBool() {
|
|
||||||
if nullable && !proto3 {
|
|
||||||
p.P(`if this.`, fieldname, ` != nil && that1.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if *this.`, fieldname, ` != *that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if !*this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if that1.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if !this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if nullable && !proto3 {
|
|
||||||
p.generateNullableField(fieldname)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` < that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.P(`if len(this.`, fieldname, `) != len(that1.`, fieldname, `) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if len(this.`, fieldname, `) < len(that1.`, fieldname, `) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`for i := range this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
if ctype {
|
|
||||||
p.P(`if c := this.`, fieldname, `[i].Compare(that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
valuegoTyp, _ := p.GoType(nil, m.ValueField)
|
|
||||||
valuegoAliasTyp, _ := p.GoType(nil, m.ValueAliasField)
|
|
||||||
nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp)
|
|
||||||
|
|
||||||
mapValue := m.ValueAliasField
|
|
||||||
if mapValue.IsMessage() || p.IsGroup(mapValue) {
|
|
||||||
if nullable && valuegoTyp == valuegoAliasTyp {
|
|
||||||
p.P(`if c := this.`, fieldname, `[i].Compare(that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
} else {
|
|
||||||
// Compare() has a pointer receiver, but map value is a value type
|
|
||||||
a := `this.` + fieldname + `[i]`
|
|
||||||
b := `that1.` + fieldname + `[i]`
|
|
||||||
if valuegoTyp != valuegoAliasTyp {
|
|
||||||
// cast back to the type that has the generated methods on it
|
|
||||||
a = `(` + valuegoTyp + `)(` + a + `)`
|
|
||||||
b = `(` + valuegoTyp + `)(` + b + `)`
|
|
||||||
}
|
|
||||||
p.P(`a := `, a)
|
|
||||||
p.P(`b := `, b)
|
|
||||||
if nullable {
|
|
||||||
p.P(`if c := a.Compare(b); c != 0 {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if c := (&a).Compare(&b); c != 0 {`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if mapValue.IsBytes() {
|
|
||||||
p.P(`if c := `, p.bytesPkg.Use(), `.Compare(this.`, fieldname, `[i], that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if mapValue.IsString() {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, `[i] < that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, `[i] < that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if c := this.`, fieldname, `[i].Compare(that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`if c := this.`, fieldname, `[i].Compare(&that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else if field.IsBytes() {
|
|
||||||
p.P(`if c := `, p.bytesPkg.Use(), `.Compare(this.`, fieldname, `[i], that1.`, fieldname, `[i]); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if field.IsString() {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, `[i] < that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if field.IsBool() {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if !this.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, `[i] < that1.`, fieldname, `[i] {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateMessage(file *generator.FileDescriptor, message *generator.Descriptor) {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Compare(that interface{}) int {`)
|
|
||||||
p.In()
|
|
||||||
p.generateMsgNullAndTypeCheck(ccTypeName)
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
|
|
||||||
for _, field := range message.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if oneof {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
p.P(`if that1.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
|
|
||||||
// Generate two type switches in order to compare the
|
|
||||||
// types of the oneofs. If they are of the same type
|
|
||||||
// call Compare, otherwise return 1 or -1.
|
|
||||||
p.P(`thisType := -1`)
|
|
||||||
p.P(`switch this.`, fieldname, `.(type) {`)
|
|
||||||
for i, subfield := range message.Field {
|
|
||||||
if *subfield.OneofIndex == *field.OneofIndex {
|
|
||||||
ccTypeName := p.OneOfTypeName(message, subfield)
|
|
||||||
p.P(`case *`, ccTypeName, `:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`thisType = `, i)
|
|
||||||
p.Out()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`default:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(fmt.Sprintf("compare: unexpected type %T in oneof", this.`, fieldname, `))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`that1Type := -1`)
|
|
||||||
p.P(`switch that1.`, fieldname, `.(type) {`)
|
|
||||||
for i, subfield := range message.Field {
|
|
||||||
if *subfield.OneofIndex == *field.OneofIndex {
|
|
||||||
ccTypeName := p.OneOfTypeName(message, subfield)
|
|
||||||
p.P(`case *`, ccTypeName, `:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`that1Type = `, i)
|
|
||||||
p.Out()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`default:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(fmt.Sprintf("compare: unexpected type %T in oneof", that1.`, fieldname, `))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`if thisType == that1Type {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if c := this.`, fieldname, `.Compare(that1.`, fieldname, `); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if thisType < that1Type {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if thisType > that1Type {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.generateField(file, message, field)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`thismap := `, p.protoPkg.Use(), `.GetUnsafeExtensionsMap(this)`)
|
|
||||||
p.P(`thatmap := `, p.protoPkg.Use(), `.GetUnsafeExtensionsMap(that1)`)
|
|
||||||
p.P(`extkeys := make([]int32, 0, len(thismap)+len(thatmap))`)
|
|
||||||
p.P(`for k, _ := range thismap {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`extkeys = append(extkeys, k)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`for k, _ := range thatmap {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if _, ok := thismap[k]; !ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`extkeys = append(extkeys, k)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(p.sortkeysPkg.Use(), `.Int32s(extkeys)`)
|
|
||||||
p.P(`for _, k := range extkeys {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if v, ok := thismap[k]; ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if v2, ok := thatmap[k]; ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if c := v.Compare(&v2); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
fieldname := "XXX_extensions"
|
|
||||||
p.P(`if c := `, p.bytesPkg.Use(), `.Compare(this.`, fieldname, `, that1.`, fieldname, `); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
fieldname := "XXX_unrecognized"
|
|
||||||
p.P(`if c := `, p.bytesPkg.Use(), `.Compare(this.`, fieldname, `, that1.`, fieldname, `); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return c`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
//Generate Compare methods for oneof fields
|
|
||||||
m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto)
|
|
||||||
for _, field := range m.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, field)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Compare(that interface{}) int {`)
|
|
||||||
p.In()
|
|
||||||
|
|
||||||
p.generateMsgNullAndTypeCheck(ccTypeName)
|
|
||||||
vanity.TurnOffNullableForNativeTypes(field)
|
|
||||||
p.generateField(file, message, field)
|
|
||||||
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
118
vendor/github.com/gogo/protobuf/plugin/compare/comparetest.go
generated
vendored
118
vendor/github.com/gogo/protobuf/plugin/compare/comparetest.go
generated
vendored
@ -1,118 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package compare
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
protoPkg := imports.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
unsafePkg := imports.NewImport("unsafe")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = imports.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if !gogoproto.HasCompare(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
hasUnsafe := gogoproto.IsUnsafeMarshaler(file.FileDescriptorProto, message.DescriptorProto) ||
|
|
||||||
gogoproto.IsUnsafeUnmarshaler(file.FileDescriptorProto, message.DescriptorProto)
|
|
||||||
p.P(`func Test`, ccTypeName, `Compare(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
if hasUnsafe {
|
|
||||||
p.P(`var bigendian uint32 = 0x01020304`)
|
|
||||||
p.P(`if *(*byte)(`, unsafePkg.Use(), `.Pointer(&bigendian)) == 1 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Skip("unsafe does not work on big endian architectures")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(p)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if c := p.Compare(msg); c != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("%#v !Compare %#v, since %d", msg, p, c)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`p2 := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`c := p.Compare(p2)`)
|
|
||||||
p.P(`c2 := p2.Compare(p)`)
|
|
||||||
p.P(`if c != (-1 * c2) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Errorf("p.Compare(p2) = %d", c)`)
|
|
||||||
p.P(`t.Errorf("p2.Compare(p) = %d", c2)`)
|
|
||||||
p.P(`t.Errorf("p = %#v", p)`)
|
|
||||||
p.P(`t.Errorf("p2 = %#v", p2)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
133
vendor/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go
generated
vendored
133
vendor/github.com/gogo/protobuf/plugin/defaultcheck/defaultcheck.go
generated
vendored
@ -1,133 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The defaultcheck plugin is used to check whether nullable is not used incorrectly.
|
|
||||||
For instance:
|
|
||||||
An error is caused if a nullable field:
|
|
||||||
- has a default value,
|
|
||||||
- is an enum which does not start at zero,
|
|
||||||
- is used for an extension,
|
|
||||||
- is used for a native proto3 type,
|
|
||||||
- is used for a repeated native type.
|
|
||||||
|
|
||||||
An error is also caused if a field with a default value is used in a message:
|
|
||||||
- which is a face.
|
|
||||||
- without getters.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- nullable
|
|
||||||
|
|
||||||
For incorrect usage of nullable with tests see:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/nullableconflict
|
|
||||||
|
|
||||||
*/
|
|
||||||
package defaultcheck
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "defaultcheck"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
for _, msg := range file.Messages() {
|
|
||||||
getters := gogoproto.HasGoGetters(file.FileDescriptorProto, msg.DescriptorProto)
|
|
||||||
face := gogoproto.IsFace(file.FileDescriptorProto, msg.DescriptorProto)
|
|
||||||
for _, field := range msg.GetField() {
|
|
||||||
if len(field.GetDefaultValue()) > 0 {
|
|
||||||
if !getters {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot have a default value and not have a getter method", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if face {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot have a default value be in a face", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.IsNullable(field) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if len(field.GetDefaultValue()) > 0 {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be non-nullable and have a default value", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if !field.IsMessage() && !gogoproto.IsCustomType(field) {
|
|
||||||
if field.IsRepeated() {
|
|
||||||
fmt.Fprintf(os.Stderr, "WARNING: field %v.%v is a repeated non-nullable native type, nullable=false has no effect\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
} else if proto3 {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v is a native type and in proto3 syntax with nullable=false there exists conflicting implementations when encoding zero values", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if field.IsBytes() {
|
|
||||||
fmt.Fprintf(os.Stderr, "WARNING: field %v.%v is a non-nullable bytes type, nullable=false has no effect\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !field.IsEnum() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
enum := p.ObjectNamed(field.GetTypeName()).(*generator.EnumDescriptor)
|
|
||||||
if len(enum.Value) == 0 || enum.Value[0].GetNumber() != 0 {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be non-nullable and be an enum type %v which does not start with zero", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name), enum.GetName())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, e := range file.GetExtension() {
|
|
||||||
if !gogoproto.IsNullable(e) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: extended field %v cannot be nullable %v", generator.CamelCase(e.GetName()), generator.CamelCase(*e.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
201
vendor/github.com/gogo/protobuf/plugin/description/description.go
generated
vendored
201
vendor/github.com/gogo/protobuf/plugin/description/description.go
generated
vendored
@ -1,201 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The description (experimental) plugin generates a Description method for each message.
|
|
||||||
The Description method returns a populated google_protobuf.FileDescriptorSet struct.
|
|
||||||
This contains the description of the files used to generate this message.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- description
|
|
||||||
- description_all
|
|
||||||
|
|
||||||
The description plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
message B {
|
|
||||||
option (gogoproto.description) = true;
|
|
||||||
optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
|
|
||||||
repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the description plugin, will generate the following code:
|
|
||||||
|
|
||||||
func (this *B) Description() (desc *google_protobuf.FileDescriptorSet) {
|
|
||||||
return ExampleDescription()
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestDescription(t *testing9.T) {
|
|
||||||
ExampleDescription()
|
|
||||||
}
|
|
||||||
|
|
||||||
The hope is to use this struct in some way instead of reflect.
|
|
||||||
This package is subject to change, since a use has not been figured out yet.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package description
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"compress/gzip"
|
|
||||||
"fmt"
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "description"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
used := false
|
|
||||||
localName := generator.FileName(file)
|
|
||||||
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
descriptorPkg := p.NewImport("github.com/gogo/protobuf/protoc-gen-gogo/descriptor")
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
gzipPkg := p.NewImport("compress/gzip")
|
|
||||||
bytesPkg := p.NewImport("bytes")
|
|
||||||
ioutilPkg := p.NewImport("io/ioutil")
|
|
||||||
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.HasDescription(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
used = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Description() (desc *`, descriptorPkg.Use(), `.FileDescriptorSet) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return `, localName, `Description()`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
if used {
|
|
||||||
|
|
||||||
p.P(`func `, localName, `Description() (desc *`, descriptorPkg.Use(), `.FileDescriptorSet) {`)
|
|
||||||
p.In()
|
|
||||||
//Don't generate SourceCodeInfo, since it will create too much code.
|
|
||||||
|
|
||||||
ss := make([]*descriptor.SourceCodeInfo, 0)
|
|
||||||
for _, f := range p.Generator.AllFiles().GetFile() {
|
|
||||||
ss = append(ss, f.SourceCodeInfo)
|
|
||||||
f.SourceCodeInfo = nil
|
|
||||||
}
|
|
||||||
b, err := proto.Marshal(p.Generator.AllFiles())
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
for i, f := range p.Generator.AllFiles().GetFile() {
|
|
||||||
f.SourceCodeInfo = ss[i]
|
|
||||||
}
|
|
||||||
p.P(`d := &`, descriptorPkg.Use(), `.FileDescriptorSet{}`)
|
|
||||||
var buf bytes.Buffer
|
|
||||||
w, _ := gzip.NewWriterLevel(&buf, gzip.BestCompression)
|
|
||||||
w.Write(b)
|
|
||||||
w.Close()
|
|
||||||
b = buf.Bytes()
|
|
||||||
p.P("var gzipped = []byte{")
|
|
||||||
p.In()
|
|
||||||
p.P("// ", len(b), " bytes of a gzipped FileDescriptorSet")
|
|
||||||
for len(b) > 0 {
|
|
||||||
n := 16
|
|
||||||
if n > len(b) {
|
|
||||||
n = len(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
s := ""
|
|
||||||
for _, c := range b[:n] {
|
|
||||||
s += fmt.Sprintf("0x%02x,", c)
|
|
||||||
}
|
|
||||||
p.P(s)
|
|
||||||
|
|
||||||
b = b[n:]
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P("}")
|
|
||||||
p.P(`r := `, bytesPkg.Use(), `.NewReader(gzipped)`)
|
|
||||||
p.P(`gzipr, err := `, gzipPkg.Use(), `.NewReader(r)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`ungzipped, err := `, ioutilPkg.Use(), `.ReadAll(gzipr)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(ungzipped, d); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return d`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
200
vendor/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go
generated
vendored
200
vendor/github.com/gogo/protobuf/plugin/embedcheck/embedcheck.go
generated
vendored
@ -1,200 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The embedcheck plugin is used to check whether embed is not used incorrectly.
|
|
||||||
For instance:
|
|
||||||
An embedded message has a generated string method, but the is a member of a message which does not.
|
|
||||||
This causes a warning.
|
|
||||||
An error is caused by a namespace conflict.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- embed
|
|
||||||
- embed_all
|
|
||||||
|
|
||||||
For incorrect usage of embed with tests see:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/embedconflict
|
|
||||||
|
|
||||||
*/
|
|
||||||
package embedcheck
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "embedcheck"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
var overwriters []map[string]gogoproto.EnableFunc = []map[string]gogoproto.EnableFunc{
|
|
||||||
{
|
|
||||||
"stringer": gogoproto.IsStringer,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"gostring": gogoproto.HasGoString,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"equal": gogoproto.HasEqual,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"verboseequal": gogoproto.HasVerboseEqual,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size": gogoproto.IsSizer,
|
|
||||||
"protosizer": gogoproto.IsProtoSizer,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"unmarshaler": gogoproto.IsUnmarshaler,
|
|
||||||
"unsafe_unmarshaler": gogoproto.IsUnsafeUnmarshaler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"marshaler": gogoproto.IsMarshaler,
|
|
||||||
"unsafe_marshaler": gogoproto.IsUnsafeMarshaler,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
for _, msg := range file.Messages() {
|
|
||||||
for _, os := range overwriters {
|
|
||||||
possible := true
|
|
||||||
for _, overwriter := range os {
|
|
||||||
if overwriter(file.FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
possible = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if possible {
|
|
||||||
p.checkOverwrite(msg, os)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.checkNameSpace(msg)
|
|
||||||
for _, field := range msg.GetField() {
|
|
||||||
if gogoproto.IsEmbed(field) && gogoproto.IsCustomName(field) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v with custom name %v cannot be embedded", *field.Name, gogoproto.GetCustomName(field))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.checkRepeated(msg)
|
|
||||||
}
|
|
||||||
for _, e := range file.GetExtension() {
|
|
||||||
if gogoproto.IsEmbed(e) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: extended field %v cannot be embedded", generator.CamelCase(*e.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) checkNameSpace(message *generator.Descriptor) map[string]bool {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
names := make(map[string]bool)
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := generator.CamelCase(*field.Name)
|
|
||||||
if field.IsMessage() && gogoproto.IsEmbed(field) {
|
|
||||||
desc := p.ObjectNamed(field.GetTypeName())
|
|
||||||
moreNames := p.checkNameSpace(desc.(*generator.Descriptor))
|
|
||||||
for another := range moreNames {
|
|
||||||
if names[another] {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: duplicate embedded fieldname %v in type %v\n", fieldname, ccTypeName)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
names[another] = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if names[fieldname] {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: duplicate embedded fieldname %v in type %v\n", fieldname, ccTypeName)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
names[fieldname] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return names
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) checkOverwrite(message *generator.Descriptor, enablers map[string]gogoproto.EnableFunc) {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
names := []string{}
|
|
||||||
for name := range enablers {
|
|
||||||
names = append(names, name)
|
|
||||||
}
|
|
||||||
for _, field := range message.Field {
|
|
||||||
if field.IsMessage() && gogoproto.IsEmbed(field) {
|
|
||||||
fieldname := generator.CamelCase(*field.Name)
|
|
||||||
desc := p.ObjectNamed(field.GetTypeName())
|
|
||||||
msg := desc.(*generator.Descriptor)
|
|
||||||
for errStr, enabled := range enablers {
|
|
||||||
if enabled(msg.File().FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
fmt.Fprintf(os.Stderr, "WARNING: found non-%v %v with embedded %v %v\n", names, ccTypeName, errStr, fieldname)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.checkOverwrite(msg, enablers)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) checkRepeated(message *generator.Descriptor) {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
for _, field := range message.Field {
|
|
||||||
if !gogoproto.IsEmbed(field) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if field.IsBytes() {
|
|
||||||
fieldname := generator.CamelCase(*field.Name)
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: found embedded bytes field %s in message %s\n", fieldname, ccTypeName)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if !field.IsRepeated() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fieldname := generator.CamelCase(*field.Name)
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: found repeated embedded field %s in message %s\n", fieldname, ccTypeName)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
104
vendor/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go
generated
vendored
104
vendor/github.com/gogo/protobuf/plugin/enumstringer/enumstringer.go
generated
vendored
@ -1,104 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The enumstringer (experimental) plugin generates a String method for each enum.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- enum_stringer
|
|
||||||
- enum_stringer_all
|
|
||||||
|
|
||||||
This package is subject to change.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package enumstringer
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type enumstringer struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
atleastOne bool
|
|
||||||
localName string
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewEnumStringer() *enumstringer {
|
|
||||||
return &enumstringer{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *enumstringer) Name() string {
|
|
||||||
return "enumstringer"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *enumstringer) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *enumstringer) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.atleastOne = false
|
|
||||||
|
|
||||||
p.localName = generator.FileName(file)
|
|
||||||
|
|
||||||
strconvPkg := p.NewImport("strconv")
|
|
||||||
|
|
||||||
for _, enum := range file.Enums() {
|
|
||||||
if !gogoproto.IsEnumStringer(file.FileDescriptorProto, enum.EnumDescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.IsGoEnumStringer(file.FileDescriptorProto, enum.EnumDescriptorProto) {
|
|
||||||
panic("Go enum stringer conflicts with new enumstringer plugin: please use gogoproto.goproto_enum_stringer or gogoproto.goproto_enum_string_all and set it to false")
|
|
||||||
}
|
|
||||||
p.atleastOne = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(enum.TypeName())
|
|
||||||
p.P("func (x ", ccTypeName, ") String() string {")
|
|
||||||
p.In()
|
|
||||||
p.P(`s, ok := `, ccTypeName, `_name[int32(x)]`)
|
|
||||||
p.P(`if ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return s`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return `, strconvPkg.Use(), `.Itoa(int(x))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.atleastOne {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewEnumStringer())
|
|
||||||
}
|
|
694
vendor/github.com/gogo/protobuf/plugin/equal/equal.go
generated
vendored
694
vendor/github.com/gogo/protobuf/plugin/equal/equal.go
generated
vendored
@ -1,694 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The equal plugin generates an Equal and a VerboseEqual method for each message.
|
|
||||||
These equal methods are quite obvious.
|
|
||||||
The only difference is that VerboseEqual returns a non nil error if it is not equal.
|
|
||||||
This error contains more detail on exactly which part of the message was not equal to the other message.
|
|
||||||
The idea is that this is useful for debugging.
|
|
||||||
|
|
||||||
Equal is enabled using the following extensions:
|
|
||||||
|
|
||||||
- equal
|
|
||||||
- equal_all
|
|
||||||
|
|
||||||
While VerboseEqual is enable dusing the following extensions:
|
|
||||||
|
|
||||||
- verbose_equal
|
|
||||||
- verbose_equal_all
|
|
||||||
|
|
||||||
The equal plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.equal_all) = true;
|
|
||||||
option (gogoproto.verbose_equal_all) = true;
|
|
||||||
|
|
||||||
message B {
|
|
||||||
optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
|
|
||||||
repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the equal plugin, will generate the following code:
|
|
||||||
|
|
||||||
func (this *B) VerboseEqual(that interface{}) error {
|
|
||||||
if that == nil {
|
|
||||||
if this == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return fmt2.Errorf("that == nil && this != nil")
|
|
||||||
}
|
|
||||||
|
|
||||||
that1, ok := that.(*B)
|
|
||||||
if !ok {
|
|
||||||
return fmt2.Errorf("that is not of type *B")
|
|
||||||
}
|
|
||||||
if that1 == nil {
|
|
||||||
if this == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return fmt2.Errorf("that is type *B but is nil && this != nil")
|
|
||||||
} else if this == nil {
|
|
||||||
return fmt2.Errorf("that is type *B but is not nil && this == nil")
|
|
||||||
}
|
|
||||||
if !this.A.Equal(&that1.A) {
|
|
||||||
return fmt2.Errorf("A this(%v) Not Equal that(%v)", this.A, that1.A)
|
|
||||||
}
|
|
||||||
if len(this.G) != len(that1.G) {
|
|
||||||
return fmt2.Errorf("G this(%v) Not Equal that(%v)", len(this.G), len(that1.G))
|
|
||||||
}
|
|
||||||
for i := range this.G {
|
|
||||||
if !this.G[i].Equal(that1.G[i]) {
|
|
||||||
return fmt2.Errorf("G this[%v](%v) Not Equal that[%v](%v)", i, this.G[i], i, that1.G[i])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) {
|
|
||||||
return fmt2.Errorf("XXX_unrecognized this(%v) Not Equal that(%v)", this.XXX_unrecognized, that1.XXX_unrecognized)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *B) Equal(that interface{}) bool {
|
|
||||||
if that == nil {
|
|
||||||
return this == nil
|
|
||||||
}
|
|
||||||
|
|
||||||
that1, ok := that.(*B)
|
|
||||||
if !ok {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if that1 == nil {
|
|
||||||
return this == nil
|
|
||||||
} else if this == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if !this.A.Equal(&that1.A) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if len(this.G) != len(that1.G) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
for i := range this.G {
|
|
||||||
if !this.G[i].Equal(that1.G[i]) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestBVerboseEqual(t *testing8.T) {
|
|
||||||
popr := math_rand8.New(math_rand8.NewSource(time8.Now().UnixNano()))
|
|
||||||
p := NewPopulatedB(popr, false)
|
|
||||||
dAtA, err := github_com_gogo_protobuf_proto2.Marshal(p)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
msg := &B{}
|
|
||||||
if err := github_com_gogo_protobuf_proto2.Unmarshal(dAtA, msg); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := p.VerboseEqual(msg); err != nil {
|
|
||||||
t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
package equal
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"github.com/gogo/protobuf/vanity"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
fmtPkg generator.Single
|
|
||||||
bytesPkg generator.Single
|
|
||||||
protoPkg generator.Single
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "equal"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.fmtPkg = p.NewImport("fmt")
|
|
||||||
p.bytesPkg = p.NewImport("bytes")
|
|
||||||
p.protoPkg = p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
|
|
||||||
for _, msg := range file.Messages() {
|
|
||||||
if msg.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
p.generateMessage(file, msg, true)
|
|
||||||
}
|
|
||||||
if gogoproto.HasEqual(file.FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
p.generateMessage(file, msg, false)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateNullableField(fieldname string, verbose bool) {
|
|
||||||
p.P(`if this.`, fieldname, ` != nil && that1.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if *this.`, fieldname, ` != *that1.`, fieldname, `{`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", *this.`, fieldname, `, *that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` == nil && that.`, fieldname, ` != nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if that1.`, fieldname, ` != nil {`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateMsgNullAndTypeCheck(ccTypeName string, verbose bool) {
|
|
||||||
p.P(`if that == nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return nil`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("that == nil && this != nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return this == nil`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
p.P(`that1, ok := that.(*`, ccTypeName, `)`)
|
|
||||||
p.P(`if !ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`that2, ok := that.(`, ccTypeName, `)`)
|
|
||||||
p.P(`if ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`that1 = &that2`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is not of type *`, ccTypeName, `")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if that1 == nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return nil`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is type *`, ccTypeName, ` but is nil && this != nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return this == nil`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("that is type *`, ccTypeName, ` but is not nil && this == nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateField(file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto, verbose bool) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
repeated := field.IsRepeated()
|
|
||||||
ctype := gogoproto.IsCustomType(field)
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
isNormal := (gogoproto.IsStdDuration(field) ||
|
|
||||||
gogoproto.IsStdDouble(field) ||
|
|
||||||
gogoproto.IsStdFloat(field) ||
|
|
||||||
gogoproto.IsStdInt64(field) ||
|
|
||||||
gogoproto.IsStdUInt64(field) ||
|
|
||||||
gogoproto.IsStdInt32(field) ||
|
|
||||||
gogoproto.IsStdUInt32(field) ||
|
|
||||||
gogoproto.IsStdBool(field) ||
|
|
||||||
gogoproto.IsStdString(field))
|
|
||||||
isBytes := gogoproto.IsStdBytes(field)
|
|
||||||
isTimestamp := gogoproto.IsStdTime(field)
|
|
||||||
// oneof := field.OneofIndex != nil
|
|
||||||
if !repeated {
|
|
||||||
if ctype || isTimestamp {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if that1.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if !this.`, fieldname, `.Equal(*that1.`, fieldname, `) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if isNormal {
|
|
||||||
if nullable {
|
|
||||||
p.generateNullableField(fieldname, verbose)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if isBytes {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if that1.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if !`, p.bytesPkg.Use(), `.Equal(*this.`, fieldname, `, *that1.`, fieldname, `) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !this.`, fieldname, `.Equal(&that1.`, fieldname, `) {`)
|
|
||||||
}
|
|
||||||
} else if field.IsBytes() {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`)
|
|
||||||
} else if field.IsString() {
|
|
||||||
if nullable && !proto3 {
|
|
||||||
p.generateNullableField(fieldname, verbose)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if nullable && !proto3 {
|
|
||||||
p.generateNullableField(fieldname, verbose)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, ` != that1.`, fieldname, `{`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.P(`if len(this.`, fieldname, `) != len(that1.`, fieldname, `) {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", len(this.`, fieldname, `), len(that1.`, fieldname, `))`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`for i := range this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
if ctype && !p.IsMap(field) {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`)
|
|
||||||
} else if isTimestamp {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(*that1.`, fieldname, `[i]) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`)
|
|
||||||
}
|
|
||||||
} else if isNormal {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if dthis, dthat := this.`, fieldname, `[i], that1.`, fieldname, `[i]; (dthis != nil && dthat != nil && *dthis != *dthat) || (dthis != nil && dthat == nil) || (dthis == nil && dthat != nil) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
}
|
|
||||||
} else if isBytes {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(*this.`, fieldname, `[i], *that1.`, fieldname, `[i]) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
valuegoTyp, _ := p.GoType(nil, m.ValueField)
|
|
||||||
valuegoAliasTyp, _ := p.GoType(nil, m.ValueAliasField)
|
|
||||||
nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp)
|
|
||||||
|
|
||||||
mapValue := m.ValueAliasField
|
|
||||||
mapValueNormal := (gogoproto.IsStdDuration(mapValue) ||
|
|
||||||
gogoproto.IsStdDouble(mapValue) ||
|
|
||||||
gogoproto.IsStdFloat(mapValue) ||
|
|
||||||
gogoproto.IsStdInt64(mapValue) ||
|
|
||||||
gogoproto.IsStdUInt64(mapValue) ||
|
|
||||||
gogoproto.IsStdInt32(mapValue) ||
|
|
||||||
gogoproto.IsStdUInt32(mapValue) ||
|
|
||||||
gogoproto.IsStdBool(mapValue) ||
|
|
||||||
gogoproto.IsStdString(mapValue))
|
|
||||||
mapValueBytes := gogoproto.IsStdBytes(mapValue)
|
|
||||||
if mapValue.IsMessage() || p.IsGroup(mapValue) {
|
|
||||||
if nullable && valuegoTyp == valuegoAliasTyp {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`)
|
|
||||||
} else {
|
|
||||||
// Equal() has a pointer receiver, but map value is a value type
|
|
||||||
a := `this.` + fieldname + `[i]`
|
|
||||||
b := `that1.` + fieldname + `[i]`
|
|
||||||
if !mapValueNormal && !mapValueBytes && valuegoTyp != valuegoAliasTyp {
|
|
||||||
// cast back to the type that has the generated methods on it
|
|
||||||
a = `(` + valuegoTyp + `)(` + a + `)`
|
|
||||||
b = `(` + valuegoTyp + `)(` + b + `)`
|
|
||||||
}
|
|
||||||
p.P(`a := `, a)
|
|
||||||
p.P(`b := `, b)
|
|
||||||
if mapValueNormal {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if *a != *b {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if a != b {`)
|
|
||||||
}
|
|
||||||
} else if mapValueBytes {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(*a, *b) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(a, b) {`)
|
|
||||||
}
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`if !a.Equal(b) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !(&a).Equal(&b) {`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if mapValue.IsBytes() {
|
|
||||||
if ctype {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(*that1.`, fieldname, `[i]) { //nullable`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) { //not nullable`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`)
|
|
||||||
}
|
|
||||||
} else if mapValue.IsString() {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
}
|
|
||||||
} else if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
if nullable {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(that1.`, fieldname, `[i]) {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if !this.`, fieldname, `[i].Equal(&that1.`, fieldname, `[i]) {`)
|
|
||||||
}
|
|
||||||
} else if field.IsBytes() {
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `[i], that1.`, fieldname, `[i]) {`)
|
|
||||||
} else if field.IsString() {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if this.`, fieldname, `[i] != that1.`, fieldname, `[i] {`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this[%v](%v) Not Equal that[%v](%v)", i, this.`, fieldname, `[i], i, that1.`, fieldname, `[i])`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) generateMessage(file *generator.FileDescriptor, message *generator.Descriptor, verbose bool) {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if verbose {
|
|
||||||
p.P(`func (this *`, ccTypeName, `) VerboseEqual(that interface{}) error {`)
|
|
||||||
} else {
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Equal(that interface{}) bool {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.generateMsgNullAndTypeCheck(ccTypeName, verbose)
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
|
|
||||||
for _, field := range message.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if oneof {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
p.P(`if that1.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` != nil && that1.`, fieldname, ` == nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if this.`, fieldname, ` == nil {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("this.`, fieldname, ` == nil && that1.`, fieldname, ` != nil")`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
if verbose {
|
|
||||||
p.P(`} else if err := this.`, fieldname, `.VerboseEqual(that1.`, fieldname, `); err != nil {`)
|
|
||||||
} else {
|
|
||||||
p.P(`} else if !this.`, fieldname, `.Equal(that1.`, fieldname, `) {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return err`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.generateField(file, message, field, verbose)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
fieldname := "XXX_InternalExtensions"
|
|
||||||
p.P(`thismap := `, p.protoPkg.Use(), `.GetUnsafeExtensionsMap(this)`)
|
|
||||||
p.P(`thatmap := `, p.protoPkg.Use(), `.GetUnsafeExtensionsMap(that1)`)
|
|
||||||
p.P(`for k, v := range thismap {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if v2, ok := thatmap[k]; ok {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if !v.Equal(&v2) {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this[%v](%v) Not Equal that[%v](%v)", k, thismap[k], k, thatmap[k])`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, `[%v] Not In that", k)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`for k, _ := range thatmap {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if _, ok := thismap[k]; !ok {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, `[%v] Not In this", k)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
fieldname := "XXX_extensions"
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
fieldname := "XXX_unrecognized"
|
|
||||||
p.P(`if !`, p.bytesPkg.Use(), `.Equal(this.`, fieldname, `, that1.`, fieldname, `) {`)
|
|
||||||
p.In()
|
|
||||||
if verbose {
|
|
||||||
p.P(`return `, p.fmtPkg.Use(), `.Errorf("`, fieldname, ` this(%v) Not Equal that(%v)", this.`, fieldname, `, that1.`, fieldname, `)`)
|
|
||||||
} else {
|
|
||||||
p.P(`return false`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
if verbose {
|
|
||||||
p.P(`return nil`)
|
|
||||||
} else {
|
|
||||||
p.P(`return true`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
//Generate Equal methods for oneof fields
|
|
||||||
m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto)
|
|
||||||
for _, field := range m.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, field)
|
|
||||||
if verbose {
|
|
||||||
p.P(`func (this *`, ccTypeName, `) VerboseEqual(that interface{}) error {`)
|
|
||||||
} else {
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Equal(that interface{}) bool {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
|
|
||||||
p.generateMsgNullAndTypeCheck(ccTypeName, verbose)
|
|
||||||
vanity.TurnOffNullableForNativeTypes(field)
|
|
||||||
p.generateField(file, message, field, verbose)
|
|
||||||
|
|
||||||
if verbose {
|
|
||||||
p.P(`return nil`)
|
|
||||||
} else {
|
|
||||||
p.P(`return true`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
109
vendor/github.com/gogo/protobuf/plugin/equal/equaltest.go
generated
vendored
109
vendor/github.com/gogo/protobuf/plugin/equal/equaltest.go
generated
vendored
@ -1,109 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package equal
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
protoPkg := imports.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
unsafePkg := imports.NewImport("unsafe")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = imports.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if !gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
hasUnsafe := gogoproto.IsUnsafeMarshaler(file.FileDescriptorProto, message.DescriptorProto) ||
|
|
||||||
gogoproto.IsUnsafeUnmarshaler(file.FileDescriptorProto, message.DescriptorProto)
|
|
||||||
p.P(`func Test`, ccTypeName, `VerboseEqual(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
if hasUnsafe {
|
|
||||||
if hasUnsafe {
|
|
||||||
p.P(`var bigendian uint32 = 0x01020304`)
|
|
||||||
p.P(`if *(*byte)(`, unsafePkg.Use(), `.Pointer(&bigendian)) == 1 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Skip("unsafe does not work on big endian architectures")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(p)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("%#v !VerboseEqual %#v, since %v", msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
233
vendor/github.com/gogo/protobuf/plugin/face/face.go
generated
vendored
233
vendor/github.com/gogo/protobuf/plugin/face/face.go
generated
vendored
@ -1,233 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The face plugin generates a function will be generated which can convert a structure which satisfies an interface (face) to the specified structure.
|
|
||||||
This interface contains getters for each of the fields in the struct.
|
|
||||||
The specified struct is also generated with the getters.
|
|
||||||
This means that getters should be turned off so as not to conflict with face getters.
|
|
||||||
This allows it to satisfy its own face.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- face
|
|
||||||
- face_all
|
|
||||||
|
|
||||||
Turn off getters by using the following extensions:
|
|
||||||
|
|
||||||
- getters
|
|
||||||
- getters_all
|
|
||||||
|
|
||||||
The face plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
message A {
|
|
||||||
option (gogoproto.face) = true;
|
|
||||||
option (gogoproto.goproto_getters) = false;
|
|
||||||
optional string Description = 1 [(gogoproto.nullable) = false];
|
|
||||||
optional int64 Number = 2 [(gogoproto.nullable) = false];
|
|
||||||
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the face plugin, will generate the following code:
|
|
||||||
|
|
||||||
type AFace interface {
|
|
||||||
Proto() github_com_gogo_protobuf_proto.Message
|
|
||||||
GetDescription() string
|
|
||||||
GetNumber() int64
|
|
||||||
GetId() github_com_gogo_protobuf_test_custom.Uuid
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *A) Proto() github_com_gogo_protobuf_proto.Message {
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *A) TestProto() github_com_gogo_protobuf_proto.Message {
|
|
||||||
return NewAFromFace(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *A) GetDescription() string {
|
|
||||||
return this.Description
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *A) GetNumber() int64 {
|
|
||||||
return this.Number
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *A) GetId() github_com_gogo_protobuf_test_custom.Uuid {
|
|
||||||
return this.Id
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewAFromFace(that AFace) *A {
|
|
||||||
this := &A{}
|
|
||||||
this.Description = that.GetDescription()
|
|
||||||
this.Number = that.GetNumber()
|
|
||||||
this.Id = that.GetId()
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestAFace(t *testing7.T) {
|
|
||||||
popr := math_rand7.New(math_rand7.NewSource(time7.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, true)
|
|
||||||
msg := p.TestProto()
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Face Equal %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
The struct A, representing the message, will also be generated just like always.
|
|
||||||
As you can see A satisfies its own Face, AFace.
|
|
||||||
|
|
||||||
Creating another struct which satisfies AFace is very easy.
|
|
||||||
Simply create all these methods specified in AFace.
|
|
||||||
Implementing The Proto method is done with the helper function NewAFromFace:
|
|
||||||
|
|
||||||
func (this *MyStruct) Proto() proto.Message {
|
|
||||||
return NewAFromFace(this)
|
|
||||||
}
|
|
||||||
|
|
||||||
just the like TestProto method which is used to test the NewAFromFace function.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package face
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "face"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = p.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.IsFace(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
panic("face does not support message with extensions")
|
|
||||||
}
|
|
||||||
if gogoproto.HasGoGetters(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
panic("face requires getters to be disabled please use gogoproto.getters or gogoproto.getters_all and set it to false")
|
|
||||||
}
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`type `, ccTypeName, `Face interface{`)
|
|
||||||
p.In()
|
|
||||||
p.P(`Proto() `, protoPkg.Use(), `.Message`)
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
goTyp = m.GoType
|
|
||||||
}
|
|
||||||
p.P(`Get`, fieldname, `() `, goTyp)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Proto() `, protoPkg.Use(), `.Message {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return this`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) TestProto() `, protoPkg.Use(), `.Message {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return New`, ccTypeName, `FromFace(this)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
goTyp = m.GoType
|
|
||||||
}
|
|
||||||
p.P(`func (this *`, ccTypeName, `) Get`, fieldname, `() `, goTyp, `{`)
|
|
||||||
p.In()
|
|
||||||
p.P(` return this.`, fieldname)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
}
|
|
||||||
p.P(``)
|
|
||||||
p.P(`func New`, ccTypeName, `FromFace(that `, ccTypeName, `Face) *`, ccTypeName, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this := &`, ccTypeName, `{}`)
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
p.P(`this.`, fieldname, ` = that.Get`, fieldname, `()`)
|
|
||||||
}
|
|
||||||
p.P(`return this`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
82
vendor/github.com/gogo/protobuf/plugin/face/facetest.go
generated
vendored
82
vendor/github.com/gogo/protobuf/plugin/face/facetest.go
generated
vendored
@ -1,82 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package face
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if !gogoproto.IsFace(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
|
|
||||||
p.P(`func Test`, ccTypeName, `Face(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`msg := p.TestProto()`)
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("%#v !Face Equal %#v", msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
386
vendor/github.com/gogo/protobuf/plugin/gostring/gostring.go
generated
vendored
386
vendor/github.com/gogo/protobuf/plugin/gostring/gostring.go
generated
vendored
@ -1,386 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The gostring plugin generates a GoString method for each message.
|
|
||||||
The GoString method is called whenever you use a fmt.Printf as such:
|
|
||||||
|
|
||||||
fmt.Printf("%#v", mymessage)
|
|
||||||
|
|
||||||
or whenever you actually call GoString()
|
|
||||||
The output produced by the GoString method can be copied from the output into code and used to set a variable.
|
|
||||||
It is totally valid Go Code and is populated exactly as the struct that was printed out.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- gostring
|
|
||||||
- gostring_all
|
|
||||||
|
|
||||||
The gostring plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.gostring_all) = true;
|
|
||||||
|
|
||||||
message A {
|
|
||||||
optional string Description = 1 [(gogoproto.nullable) = false];
|
|
||||||
optional int64 Number = 2 [(gogoproto.nullable) = false];
|
|
||||||
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the gostring plugin, will generate the following code:
|
|
||||||
|
|
||||||
func (this *A) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := strings1.Join([]string{`&test.A{` + `Description:` + fmt1.Sprintf("%#v", this.Description), `Number:` + fmt1.Sprintf("%#v", this.Number), `Id:` + fmt1.Sprintf("%#v", this.Id), `XXX_unrecognized:` + fmt1.Sprintf("%#v", this.XXX_unrecognized) + `}`}, ", ")
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestAGoString(t *testing6.T) {
|
|
||||||
popr := math_rand6.New(math_rand6.NewSource(time6.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, false)
|
|
||||||
s1 := p.GoString()
|
|
||||||
s2 := fmt2.Sprintf("%#v", p)
|
|
||||||
if s1 != s2 {
|
|
||||||
t.Fatalf("GoString want %v got %v", s1, s2)
|
|
||||||
}
|
|
||||||
_, err := go_parser.ParseExpr(s1)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Typically fmt.Printf("%#v") will stop to print when it reaches a pointer and
|
|
||||||
not print their values, while the generated GoString method will always print all values, recursively.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package gostring
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type gostring struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
atleastOne bool
|
|
||||||
localName string
|
|
||||||
overwrite bool
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewGoString() *gostring {
|
|
||||||
return &gostring{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *gostring) Name() string {
|
|
||||||
return "gostring"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *gostring) Overwrite() {
|
|
||||||
p.overwrite = true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *gostring) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *gostring) Generate(file *generator.FileDescriptor) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.atleastOne = false
|
|
||||||
|
|
||||||
p.localName = generator.FileName(file)
|
|
||||||
|
|
||||||
fmtPkg := p.NewImport("fmt")
|
|
||||||
stringsPkg := p.NewImport("strings")
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = p.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
sortPkg := p.NewImport("sort")
|
|
||||||
strconvPkg := p.NewImport("strconv")
|
|
||||||
reflectPkg := p.NewImport("reflect")
|
|
||||||
sortKeysPkg := p.NewImport("github.com/gogo/protobuf/sortkeys")
|
|
||||||
|
|
||||||
extensionToGoStringUsed := false
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !p.overwrite && !gogoproto.HasGoString(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p.atleastOne = true
|
|
||||||
packageName := file.GoPackageName()
|
|
||||||
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (this *`, ccTypeName, `) GoString() string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`s := make([]string, 0, `, strconv.Itoa(len(message.Field)+4), `)`)
|
|
||||||
p.P(`s = append(s, "&`, packageName, ".", ccTypeName, `{")`)
|
|
||||||
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
for _, field := range message.Field {
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
repeated := field.IsRepeated()
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if oneof {
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
mapgoTyp, keyField, keyAliasField := m.GoType, m.KeyField, m.KeyAliasField
|
|
||||||
keysName := `keysFor` + fieldname
|
|
||||||
keygoTyp, _ := p.GoType(nil, keyField)
|
|
||||||
keygoTyp = strings.Replace(keygoTyp, "*", "", 1)
|
|
||||||
keygoAliasTyp, _ := p.GoType(nil, keyAliasField)
|
|
||||||
keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1)
|
|
||||||
keyCapTyp := generator.CamelCase(keygoTyp)
|
|
||||||
p.P(keysName, ` := make([]`, keygoTyp, `, 0, len(this.`, fieldname, `))`)
|
|
||||||
p.P(`for k, _ := range this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
if keygoAliasTyp == keygoTyp {
|
|
||||||
p.P(keysName, ` = append(`, keysName, `, k)`)
|
|
||||||
} else {
|
|
||||||
p.P(keysName, ` = append(`, keysName, `, `, keygoTyp, `(k))`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(sortKeysPkg.Use(), `.`, keyCapTyp, `s(`, keysName, `)`)
|
|
||||||
mapName := `mapStringFor` + fieldname
|
|
||||||
p.P(mapName, ` := "`, mapgoTyp, `{"`)
|
|
||||||
p.P(`for _, k := range `, keysName, ` {`)
|
|
||||||
p.In()
|
|
||||||
if keygoAliasTyp == keygoTyp {
|
|
||||||
p.P(mapName, ` += fmt.Sprintf("%#v: %#v,", k, this.`, fieldname, `[k])`)
|
|
||||||
} else {
|
|
||||||
p.P(mapName, ` += fmt.Sprintf("%#v: %#v,", k, this.`, fieldname, `[`, keygoAliasTyp, `(k)])`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(mapName, ` += "}"`)
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, mapName, `+ ",\n")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if (field.IsMessage() && !gogoproto.IsCustomType(field) && !gogoproto.IsStdType(field)) || p.IsGroup(field) {
|
|
||||||
if nullable || repeated {
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
}
|
|
||||||
if nullable {
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`)
|
|
||||||
} else if repeated {
|
|
||||||
if nullable {
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`)
|
|
||||||
} else {
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
goTyp = strings.Replace(goTyp, "[]", "", 1)
|
|
||||||
p.P("vs := make([]", goTyp, ", len(this.", fieldname, "))")
|
|
||||||
p.P("for i := range vs {")
|
|
||||||
p.In()
|
|
||||||
p.P("vs[i] = this.", fieldname, "[i]")
|
|
||||||
p.Out()
|
|
||||||
p.P("}")
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", vs) + ",\n")`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, stringsPkg.Use(), `.Replace(this.`, fieldname, `.GoString()`, ",`&`,``,1)", ` + ",\n")`)
|
|
||||||
}
|
|
||||||
if nullable || repeated {
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if !proto3 && (nullable || repeated) {
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
}
|
|
||||||
if field.IsEnum() {
|
|
||||||
if nullable && !repeated && !proto3 {
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + valueToGoString`, p.localName, `(this.`, fieldname, `,"`, generator.GoTypeToName(goTyp), `"`, `) + ",\n")`)
|
|
||||||
} else {
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if nullable && !repeated && !proto3 {
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + valueToGoString`, p.localName, `(this.`, fieldname, `,"`, generator.GoTypeToName(goTyp), `"`, `) + ",\n")`)
|
|
||||||
} else {
|
|
||||||
p.P(`s = append(s, "`, fieldname, `: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `) + ",\n")`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !proto3 && (nullable || repeated) {
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`s = append(s, "XXX_InternalExtensions: " + extensionToGoString`, p.localName, `(this) + ",\n")`)
|
|
||||||
extensionToGoStringUsed = true
|
|
||||||
} else {
|
|
||||||
p.P(`if this.XXX_extensions != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`s = append(s, "XXX_extensions: " + `, fmtPkg.Use(), `.Sprintf("%#v", this.XXX_extensions) + ",\n")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if this.XXX_unrecognized != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`s = append(s, "XXX_unrecognized:" + `, fmtPkg.Use(), `.Sprintf("%#v", this.XXX_unrecognized) + ",\n")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`s = append(s, "}")`)
|
|
||||||
p.P(`return `, stringsPkg.Use(), `.Join(s, "")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
//Generate GoString methods for oneof fields
|
|
||||||
for _, field := range message.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, field)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) GoString() string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
outStr := strings.Join([]string{
|
|
||||||
"s := ",
|
|
||||||
stringsPkg.Use(), ".Join([]string{`&", packageName, ".", ccTypeName, "{` + \n",
|
|
||||||
"`", fieldname, ":` + ", fmtPkg.Use(), `.Sprintf("%#v", this.`, fieldname, `)`,
|
|
||||||
" + `}`",
|
|
||||||
`}`,
|
|
||||||
`,", "`,
|
|
||||||
`)`}, "")
|
|
||||||
p.P(outStr)
|
|
||||||
p.P(`return s`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.atleastOne {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`func valueToGoString`, p.localName, `(v interface{}, typ string) string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`rv := `, reflectPkg.Use(), `.ValueOf(v)`)
|
|
||||||
p.P(`if rv.IsNil() {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`pv := `, reflectPkg.Use(), `.Indirect(rv).Interface()`)
|
|
||||||
p.P(`return `, fmtPkg.Use(), `.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
if extensionToGoStringUsed {
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
fmt.Fprintf(os.Stderr, "The GoString plugin for messages with extensions requires importing gogoprotobuf. Please see file %s", file.GetName())
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
p.P(`func extensionToGoString`, p.localName, `(m `, protoPkg.Use(), `.Message) string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`e := `, protoPkg.Use(), `.GetUnsafeExtensionsMap(m)`)
|
|
||||||
p.P(`if e == nil { return "nil" }`)
|
|
||||||
p.P(`s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"`)
|
|
||||||
p.P(`keys := make([]int, 0, len(e))`)
|
|
||||||
p.P(`for k := range e {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`keys = append(keys, int(k))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(sortPkg.Use(), `.Ints(keys)`)
|
|
||||||
p.P(`ss := []string{}`)
|
|
||||||
p.P(`for _, k := range keys {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`ss = append(ss, `, strconvPkg.Use(), `.Itoa(k) + ": " + e[int32(k)].GoString())`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`s+=`, stringsPkg.Use(), `.Join(ss, ",") + "})"`)
|
|
||||||
p.P(`return s`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewGoString())
|
|
||||||
}
|
|
90
vendor/github.com/gogo/protobuf/plugin/gostring/gostringtest.go
generated
vendored
90
vendor/github.com/gogo/protobuf/plugin/gostring/gostringtest.go
generated
vendored
@ -1,90 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package gostring
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
fmtPkg := imports.NewImport("fmt")
|
|
||||||
parserPkg := imports.NewImport("go/parser")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if !gogoproto.HasGoString(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Test`, ccTypeName, `GoString(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`s1 := p.GoString()`)
|
|
||||||
p.P(`s2 := `, fmtPkg.Use(), `.Sprintf("%#v", p)`)
|
|
||||||
p.P(`if s1 != s2 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("GoString want %v got %v", s1, s2)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`_, err := `, parserPkg.Use(), `.ParseExpr(s1)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatal(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
1140
vendor/github.com/gogo/protobuf/plugin/marshalto/marshalto.go
generated
vendored
1140
vendor/github.com/gogo/protobuf/plugin/marshalto/marshalto.go
generated
vendored
File diff suppressed because it is too large
Load Diff
93
vendor/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go
generated
vendored
93
vendor/github.com/gogo/protobuf/plugin/oneofcheck/oneofcheck.go
generated
vendored
@ -1,93 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The oneofcheck plugin is used to check whether oneof is not used incorrectly.
|
|
||||||
For instance:
|
|
||||||
An error is caused if a oneof field:
|
|
||||||
- is used in a face
|
|
||||||
- is an embedded field
|
|
||||||
|
|
||||||
*/
|
|
||||||
package oneofcheck
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "oneofcheck"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
for _, msg := range file.Messages() {
|
|
||||||
face := gogoproto.IsFace(file.FileDescriptorProto, msg.DescriptorProto)
|
|
||||||
for _, field := range msg.GetField() {
|
|
||||||
if field.OneofIndex == nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if face {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in a face and oneof\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if gogoproto.IsEmbed(field) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and an embedded field\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if !gogoproto.IsNullable(field) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and a non-nullable field\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if gogoproto.IsUnion(file.FileDescriptorProto, msg.DescriptorProto) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: field %v.%v cannot be in an oneof and in an union (deprecated)\n", generator.CamelCase(*msg.Name), generator.CamelCase(*field.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) GenerateImports(*generator.FileDescriptor) {}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
815
vendor/github.com/gogo/protobuf/plugin/populate/populate.go
generated
vendored
815
vendor/github.com/gogo/protobuf/plugin/populate/populate.go
generated
vendored
@ -1,815 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The populate plugin generates a NewPopulated function.
|
|
||||||
This function returns a newly populated structure.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- populate
|
|
||||||
- populate_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.populate_all) = true;
|
|
||||||
|
|
||||||
message B {
|
|
||||||
optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
|
|
||||||
repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the populate plugin, will generate code the following code:
|
|
||||||
|
|
||||||
func NewPopulatedB(r randyExample, easy bool) *B {
|
|
||||||
this := &B{}
|
|
||||||
v2 := NewPopulatedA(r, easy)
|
|
||||||
this.A = *v2
|
|
||||||
if r.Intn(10) != 0 {
|
|
||||||
v3 := r.Intn(10)
|
|
||||||
this.G = make([]github_com_gogo_protobuf_test_custom.Uint128, v3)
|
|
||||||
for i := 0; i < v3; i++ {
|
|
||||||
v4 := github_com_gogo_protobuf_test_custom.NewPopulatedUint128(r)
|
|
||||||
this.G[i] = *v4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !easy && r.Intn(10) != 0 {
|
|
||||||
this.XXX_unrecognized = randUnrecognizedExample(r, 3)
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
The idea that is useful for testing.
|
|
||||||
Most of the other plugins' generated test code uses it.
|
|
||||||
You will still be able to use the generated test code of other packages
|
|
||||||
if you turn off the popluate plugin and write your own custom NewPopulated function.
|
|
||||||
|
|
||||||
If the easy flag is not set the XXX_unrecognized and XXX_extensions fields are also populated.
|
|
||||||
These have caused problems with JSON marshalling and unmarshalling tests.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package populate
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"math"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"github.com/gogo/protobuf/vanity"
|
|
||||||
)
|
|
||||||
|
|
||||||
type VarGen interface {
|
|
||||||
Next() string
|
|
||||||
Current() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type varGen struct {
|
|
||||||
index int64
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewVarGen() VarGen {
|
|
||||||
return &varGen{0}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *varGen) Next() string {
|
|
||||||
this.index++
|
|
||||||
return fmt.Sprintf("v%d", this.index)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *varGen) Current() string {
|
|
||||||
return fmt.Sprintf("v%d", this.index)
|
|
||||||
}
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
varGen VarGen
|
|
||||||
atleastOne bool
|
|
||||||
localName string
|
|
||||||
typesPkg generator.Single
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "populate"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func value(typeName string, fieldType descriptor.FieldDescriptorProto_Type) string {
|
|
||||||
switch fieldType {
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE:
|
|
||||||
return typeName + "(r.Float64())"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT:
|
|
||||||
return typeName + "(r.Float32())"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_INT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
return typeName + "(r.Int63())"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED64:
|
|
||||||
return typeName + "(uint64(r.Uint32()))"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_INT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_ENUM:
|
|
||||||
return typeName + "(r.Int31())"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED32:
|
|
||||||
return typeName + "(r.Uint32())"
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
return typeName + `(bool(r.Intn(2) == 0))`
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_STRING,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_GROUP,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_MESSAGE,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_BYTES:
|
|
||||||
}
|
|
||||||
panic(fmt.Errorf("unexpected type %v", typeName))
|
|
||||||
}
|
|
||||||
|
|
||||||
func negative(fieldType descriptor.FieldDescriptorProto_Type) bool {
|
|
||||||
switch fieldType {
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) getFuncName(goTypName string, field *descriptor.FieldDescriptorProto) string {
|
|
||||||
funcName := "NewPopulated" + goTypName
|
|
||||||
goTypNames := strings.Split(goTypName, ".")
|
|
||||||
if len(goTypNames) == 2 {
|
|
||||||
funcName = goTypNames[0] + ".NewPopulated" + goTypNames[1]
|
|
||||||
} else if len(goTypNames) != 1 {
|
|
||||||
panic(fmt.Errorf("unreachable: too many dots in %v", goTypName))
|
|
||||||
}
|
|
||||||
if field != nil {
|
|
||||||
switch {
|
|
||||||
case gogoproto.IsStdTime(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdTime"
|
|
||||||
case gogoproto.IsStdDuration(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdDuration"
|
|
||||||
case gogoproto.IsStdDouble(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdDouble"
|
|
||||||
case gogoproto.IsStdFloat(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdFloat"
|
|
||||||
case gogoproto.IsStdInt64(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdInt64"
|
|
||||||
case gogoproto.IsStdUInt64(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdUInt64"
|
|
||||||
case gogoproto.IsStdInt32(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdInt32"
|
|
||||||
case gogoproto.IsStdUInt32(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdUInt32"
|
|
||||||
case gogoproto.IsStdBool(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdBool"
|
|
||||||
case gogoproto.IsStdString(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdString"
|
|
||||||
case gogoproto.IsStdBytes(field):
|
|
||||||
funcName = p.typesPkg.Use() + ".NewPopulatedStdBytes"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return funcName
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) getFuncCall(goTypName string, field *descriptor.FieldDescriptorProto) string {
|
|
||||||
funcName := p.getFuncName(goTypName, field)
|
|
||||||
funcCall := funcName + "(r, easy)"
|
|
||||||
return funcCall
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) getCustomFuncCall(goTypName string) string {
|
|
||||||
funcName := p.getFuncName(goTypName, nil)
|
|
||||||
funcCall := funcName + "(r)"
|
|
||||||
return funcCall
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) getEnumVal(field *descriptor.FieldDescriptorProto, goTyp string) string {
|
|
||||||
enum := p.ObjectNamed(field.GetTypeName()).(*generator.EnumDescriptor)
|
|
||||||
l := len(enum.Value)
|
|
||||||
values := make([]string, l)
|
|
||||||
for i := range enum.Value {
|
|
||||||
values[i] = strconv.Itoa(int(*enum.Value[i].Number))
|
|
||||||
}
|
|
||||||
arr := "[]int32{" + strings.Join(values, ",") + "}"
|
|
||||||
val := strings.Join([]string{generator.GoTypeToName(goTyp), `(`, arr, `[r.Intn(`, fmt.Sprintf("%d", l), `)])`}, "")
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) GenerateField(file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
goTypName := generator.GoTypeToName(goTyp)
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
keygoTyp, _ := p.GoType(nil, m.KeyField)
|
|
||||||
keygoTyp = strings.Replace(keygoTyp, "*", "", 1)
|
|
||||||
keygoAliasTyp, _ := p.GoType(nil, m.KeyAliasField)
|
|
||||||
keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1)
|
|
||||||
|
|
||||||
valuegoTyp, _ := p.GoType(nil, m.ValueField)
|
|
||||||
valuegoAliasTyp, _ := p.GoType(nil, m.ValueAliasField)
|
|
||||||
keytypName := generator.GoTypeToName(keygoTyp)
|
|
||||||
keygoAliasTyp = generator.GoTypeToName(keygoAliasTyp)
|
|
||||||
valuetypAliasName := generator.GoTypeToName(valuegoAliasTyp)
|
|
||||||
|
|
||||||
nullable, valuegoTyp, valuegoAliasTyp := generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp)
|
|
||||||
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, m.GoType, `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
keyval := ""
|
|
||||||
if m.KeyField.IsString() {
|
|
||||||
keyval = fmt.Sprintf("randString%v(r)", p.localName)
|
|
||||||
} else {
|
|
||||||
keyval = value(keytypName, m.KeyField.GetType())
|
|
||||||
}
|
|
||||||
if keygoAliasTyp != keygoTyp {
|
|
||||||
keyval = keygoAliasTyp + `(` + keyval + `)`
|
|
||||||
}
|
|
||||||
if m.ValueField.IsMessage() || p.IsGroup(field) ||
|
|
||||||
(m.ValueField.IsBytes() && gogoproto.IsCustomType(field)) {
|
|
||||||
s := `this.` + fieldname + `[` + keyval + `] = `
|
|
||||||
if gogoproto.IsStdType(field) {
|
|
||||||
valuegoTyp = valuegoAliasTyp
|
|
||||||
}
|
|
||||||
funcCall := p.getCustomFuncCall(goTypName)
|
|
||||||
if !gogoproto.IsCustomType(field) {
|
|
||||||
goTypName = generator.GoTypeToName(valuegoTyp)
|
|
||||||
funcCall = p.getFuncCall(goTypName, m.ValueAliasField)
|
|
||||||
}
|
|
||||||
if !nullable {
|
|
||||||
funcCall = `*` + funcCall
|
|
||||||
}
|
|
||||||
if valuegoTyp != valuegoAliasTyp {
|
|
||||||
funcCall = `(` + valuegoAliasTyp + `)(` + funcCall + `)`
|
|
||||||
}
|
|
||||||
s += funcCall
|
|
||||||
p.P(s)
|
|
||||||
} else if m.ValueField.IsEnum() {
|
|
||||||
s := `this.` + fieldname + `[` + keyval + `]` + ` = ` + p.getEnumVal(m.ValueField, valuegoTyp)
|
|
||||||
p.P(s)
|
|
||||||
} else if m.ValueField.IsBytes() {
|
|
||||||
count := p.varGen.Next()
|
|
||||||
p.P(count, ` := r.Intn(100)`)
|
|
||||||
p.P(p.varGen.Next(), ` := `, keyval)
|
|
||||||
p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] = make(`, valuegoTyp, `, `, count, `)`)
|
|
||||||
p.P(`for i := 0; i < `, count, `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[`, p.varGen.Current(), `][i] = byte(r.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if m.ValueField.IsString() {
|
|
||||||
s := `this.` + fieldname + `[` + keyval + `]` + ` = ` + fmt.Sprintf("randString%v(r)", p.localName)
|
|
||||||
p.P(s)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), ` := `, keyval)
|
|
||||||
p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] = `, value(valuetypAliasName, m.ValueField.GetType()))
|
|
||||||
if negative(m.ValueField.GetType()) {
|
|
||||||
p.P(`if r.Intn(2) == 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[`, p.varGen.Current(), `] *= -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if gogoproto.IsCustomType(field) {
|
|
||||||
funcCall := p.getCustomFuncCall(goTypName)
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(p.varGen.Next(), `:= `, funcCall)
|
|
||||||
p.P(`this.`, fieldname, `[i] = *`, p.varGen.Current())
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if gogoproto.IsNullable(field) {
|
|
||||||
p.P(`this.`, fieldname, ` = `, funcCall)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), `:= `, funcCall)
|
|
||||||
p.P(`this.`, fieldname, ` = *`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
} else if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
funcCall := p.getFuncCall(goTypName, field)
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(5)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
if gogoproto.IsNullable(field) {
|
|
||||||
p.P(`this.`, fieldname, `[i] = `, funcCall)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), `:= `, funcCall)
|
|
||||||
p.P(`this.`, fieldname, `[i] = *`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
if gogoproto.IsNullable(field) {
|
|
||||||
p.P(`this.`, fieldname, ` = `, funcCall)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), `:= `, funcCall)
|
|
||||||
p.P(`this.`, fieldname, ` = *`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if field.IsEnum() {
|
|
||||||
val := p.getEnumVal(field, goTyp)
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i] = `, val)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if !gogoproto.IsNullable(field) || proto3 {
|
|
||||||
p.P(`this.`, fieldname, ` = `, val)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), ` := `, val)
|
|
||||||
p.P(`this.`, fieldname, ` = &`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
} else if field.IsBytes() {
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(100)`)
|
|
||||||
p.P(`this.`, fieldname, `[i] = make([]byte,`, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for j := 0; j < `, p.varGen.Current(), `; j++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i][j] = byte(r.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(100)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i] = byte(r.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else if field.IsString() {
|
|
||||||
typName := generator.GoTypeToName(goTyp)
|
|
||||||
val := fmt.Sprintf("%s(randString%v(r))", typName, p.localName)
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i] = `, val)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if !gogoproto.IsNullable(field) || proto3 {
|
|
||||||
p.P(`this.`, fieldname, ` = `, val)
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), `:= `, val)
|
|
||||||
p.P(`this.`, fieldname, ` = &`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
typName := generator.GoTypeToName(goTyp)
|
|
||||||
if field.IsRepeated() {
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(10)`)
|
|
||||||
p.P(`this.`, fieldname, ` = make(`, goTyp, `, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i] = `, value(typName, field.GetType()))
|
|
||||||
if negative(field.GetType()) {
|
|
||||||
p.P(`if r.Intn(2) == 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, `[i] *= -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if !gogoproto.IsNullable(field) || proto3 {
|
|
||||||
p.P(`this.`, fieldname, ` = `, value(typName, field.GetType()))
|
|
||||||
if negative(field.GetType()) {
|
|
||||||
p.P(`if r.Intn(2) == 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, ` *= -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
p.P(p.varGen.Next(), ` := `, value(typName, field.GetType()))
|
|
||||||
if negative(field.GetType()) {
|
|
||||||
p.P(`if r.Intn(2) == 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(p.varGen.Current(), ` *= -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`this.`, fieldname, ` = &`, p.varGen.Current())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) hasLoop(pkg string, field *descriptor.FieldDescriptorProto, visited []*generator.Descriptor, excludes []*generator.Descriptor) *generator.Descriptor {
|
|
||||||
if field.IsMessage() || p.IsGroup(field) || p.IsMap(field) {
|
|
||||||
var fieldMessage *generator.Descriptor
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
if !m.ValueField.IsMessage() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
fieldMessage = p.ObjectNamed(m.ValueField.GetTypeName()).(*generator.Descriptor)
|
|
||||||
} else {
|
|
||||||
fieldMessage = p.ObjectNamed(field.GetTypeName()).(*generator.Descriptor)
|
|
||||||
}
|
|
||||||
fieldTypeName := generator.CamelCaseSlice(fieldMessage.TypeName())
|
|
||||||
for _, message := range visited {
|
|
||||||
messageTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if fieldTypeName == messageTypeName {
|
|
||||||
for _, e := range excludes {
|
|
||||||
if fieldTypeName == generator.CamelCaseSlice(e.TypeName()) {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fieldMessage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, f := range fieldMessage.Field {
|
|
||||||
if strings.HasPrefix(f.GetTypeName(), "."+pkg) {
|
|
||||||
visited = append(visited, fieldMessage)
|
|
||||||
loopTo := p.hasLoop(pkg, f, visited, excludes)
|
|
||||||
if loopTo != nil {
|
|
||||||
return loopTo
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) loops(pkg string, field *descriptor.FieldDescriptorProto, message *generator.Descriptor) int {
|
|
||||||
//fmt.Fprintf(os.Stderr, "loops %v %v\n", field.GetTypeName(), generator.CamelCaseSlice(message.TypeName()))
|
|
||||||
excludes := []*generator.Descriptor{}
|
|
||||||
loops := 0
|
|
||||||
for {
|
|
||||||
visited := []*generator.Descriptor{}
|
|
||||||
loopTo := p.hasLoop(pkg, field, visited, excludes)
|
|
||||||
if loopTo == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
//fmt.Fprintf(os.Stderr, "loopTo %v\n", generator.CamelCaseSlice(loopTo.TypeName()))
|
|
||||||
excludes = append(excludes, loopTo)
|
|
||||||
loops++
|
|
||||||
}
|
|
||||||
return loops
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.atleastOne = false
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.varGen = NewVarGen()
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
p.typesPkg = p.NewImport("github.com/gogo/protobuf/types")
|
|
||||||
p.localName = generator.FileName(file)
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = p.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.HasPopulate(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p.atleastOne = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
loopLevels := make([]int, len(message.Field))
|
|
||||||
maxLoopLevel := 0
|
|
||||||
for i, field := range message.Field {
|
|
||||||
loopLevels[i] = p.loops(file.GetPackage(), field, message)
|
|
||||||
if loopLevels[i] > maxLoopLevel {
|
|
||||||
maxLoopLevel = loopLevels[i]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ranTotal := 0
|
|
||||||
for i := range loopLevels {
|
|
||||||
ranTotal += int(math.Pow10(maxLoopLevel - loopLevels[i]))
|
|
||||||
}
|
|
||||||
p.P(`func NewPopulated`, ccTypeName, `(r randy`, p.localName, `, easy bool) *`, ccTypeName, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this := &`, ccTypeName, `{}`)
|
|
||||||
if gogoproto.IsUnion(message.File().FileDescriptorProto, message.DescriptorProto) && len(message.Field) > 0 {
|
|
||||||
p.P(`fieldNum := r.Intn(`, fmt.Sprintf("%d", ranTotal), `)`)
|
|
||||||
p.P(`switch fieldNum {`)
|
|
||||||
k := 0
|
|
||||||
for i, field := range message.Field {
|
|
||||||
is := []string{}
|
|
||||||
ran := int(math.Pow10(maxLoopLevel - loopLevels[i]))
|
|
||||||
for j := 0; j < ran; j++ {
|
|
||||||
is = append(is, fmt.Sprintf("%d", j+k))
|
|
||||||
}
|
|
||||||
k += ran
|
|
||||||
p.P(`case `, strings.Join(is, ","), `:`)
|
|
||||||
p.In()
|
|
||||||
p.GenerateField(file, message, field)
|
|
||||||
p.Out()
|
|
||||||
}
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
var maxFieldNumber int32
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
for fieldIndex, field := range message.Field {
|
|
||||||
if field.GetNumber() > maxFieldNumber {
|
|
||||||
maxFieldNumber = field.GetNumber()
|
|
||||||
}
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
if field.IsRequired() || (!gogoproto.IsNullable(field) && !field.IsRepeated()) || (proto3 && !field.IsMessage()) {
|
|
||||||
p.GenerateField(file, message, field)
|
|
||||||
} else {
|
|
||||||
if loopLevels[fieldIndex] > 0 {
|
|
||||||
p.P(`if r.Intn(5) == 0 {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if r.Intn(5) != 0 {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.GenerateField(file, message, field)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
fieldNumbers := []int32{}
|
|
||||||
for _, f := range message.Field {
|
|
||||||
fname := p.GetFieldName(message, f)
|
|
||||||
if fname == fieldname {
|
|
||||||
fieldNumbers = append(fieldNumbers, f.GetNumber())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`oneofNumber_`, fieldname, ` := `, fmt.Sprintf("%#v", fieldNumbers), `[r.Intn(`, strconv.Itoa(len(fieldNumbers)), `)]`)
|
|
||||||
p.P(`switch oneofNumber_`, fieldname, ` {`)
|
|
||||||
for _, f := range message.Field {
|
|
||||||
fname := p.GetFieldName(message, f)
|
|
||||||
if fname != fieldname {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p.P(`case `, strconv.Itoa(int(f.GetNumber())), `:`)
|
|
||||||
p.In()
|
|
||||||
ccTypeName := p.OneOfTypeName(message, f)
|
|
||||||
p.P(`this.`, fname, ` = NewPopulated`, ccTypeName, `(r, easy)`)
|
|
||||||
p.Out()
|
|
||||||
}
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
p.P(`if !easy && r.Intn(10) != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`l := r.Intn(5)`)
|
|
||||||
p.P(`for i := 0; i < l; i++ {`)
|
|
||||||
p.In()
|
|
||||||
if len(message.DescriptorProto.GetExtensionRange()) > 1 {
|
|
||||||
p.P(`eIndex := r.Intn(`, strconv.Itoa(len(message.DescriptorProto.GetExtensionRange())), `)`)
|
|
||||||
p.P(`fieldNumber := 0`)
|
|
||||||
p.P(`switch eIndex {`)
|
|
||||||
for i, e := range message.DescriptorProto.GetExtensionRange() {
|
|
||||||
p.P(`case `, strconv.Itoa(i), `:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`fieldNumber = r.Intn(`, strconv.Itoa(int(e.GetEnd()-e.GetStart())), `) + `, strconv.Itoa(int(e.GetStart())))
|
|
||||||
p.Out()
|
|
||||||
if e.GetEnd() > maxFieldNumber {
|
|
||||||
maxFieldNumber = e.GetEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
e := message.DescriptorProto.GetExtensionRange()[0]
|
|
||||||
p.P(`fieldNumber := r.Intn(`, strconv.Itoa(int(e.GetEnd()-e.GetStart())), `) + `, strconv.Itoa(int(e.GetStart())))
|
|
||||||
if e.GetEnd() > maxFieldNumber {
|
|
||||||
maxFieldNumber = e.GetEnd()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`wire := r.Intn(4)`)
|
|
||||||
p.P(`if wire == 3 { wire = 5 }`)
|
|
||||||
p.P(`dAtA := randField`, p.localName, `(nil, r, fieldNumber, wire)`)
|
|
||||||
p.P(protoPkg.Use(), `.SetRawExtension(this, int32(fieldNumber), dAtA)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
if maxFieldNumber < (1 << 10) {
|
|
||||||
p.P(`if !easy && r.Intn(10) != 0 {`)
|
|
||||||
p.In()
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`this.XXX_unrecognized = randUnrecognized`, p.localName, `(r, `, strconv.Itoa(int(maxFieldNumber+1)), `)`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`return this`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
|
|
||||||
//Generate NewPopulated functions for oneof fields
|
|
||||||
m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto)
|
|
||||||
for _, f := range m.Field {
|
|
||||||
oneof := f.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, f)
|
|
||||||
p.P(`func NewPopulated`, ccTypeName, `(r randy`, p.localName, `, easy bool) *`, ccTypeName, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this := &`, ccTypeName, `{}`)
|
|
||||||
vanity.TurnOffNullableForNativeTypes(f)
|
|
||||||
p.GenerateField(file, message, f)
|
|
||||||
p.P(`return this`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.atleastOne {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`type randy`, p.localName, ` interface {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`Float32() float32`)
|
|
||||||
p.P(`Float64() float64`)
|
|
||||||
p.P(`Int63() int64`)
|
|
||||||
p.P(`Int31() int32`)
|
|
||||||
p.P(`Uint32() uint32`)
|
|
||||||
p.P(`Intn(n int) int`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`func randUTF8Rune`, p.localName, `(r randy`, p.localName, `) rune {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`ru := r.Intn(62)`)
|
|
||||||
p.P(`if ru < 10 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return rune(ru+48)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`} else if ru < 36 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return rune(ru+55)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return rune(ru+61)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`func randString`, p.localName, `(r randy`, p.localName, `) string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(p.varGen.Next(), ` := r.Intn(100)`)
|
|
||||||
p.P(`tmps := make([]rune, `, p.varGen.Current(), `)`)
|
|
||||||
p.P(`for i := 0; i < `, p.varGen.Current(), `; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`tmps[i] = randUTF8Rune`, p.localName, `(r)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return string(tmps)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`func randUnrecognized`, p.localName, `(r randy`, p.localName, `, maxFieldNumber int) (dAtA []byte) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`l := r.Intn(5)`)
|
|
||||||
p.P(`for i := 0; i < l; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`wire := r.Intn(4)`)
|
|
||||||
p.P(`if wire == 3 { wire = 5 }`)
|
|
||||||
p.P(`fieldNumber := maxFieldNumber + r.Intn(100)`)
|
|
||||||
p.P(`dAtA = randField`, p.localName, `(dAtA, r, fieldNumber, wire)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return dAtA`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`func randField`, p.localName, `(dAtA []byte, r randy`, p.localName, `, fieldNumber int, wire int) []byte {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`key := uint32(fieldNumber)<<3 | uint32(wire)`)
|
|
||||||
p.P(`switch wire {`)
|
|
||||||
p.P(`case 0:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(key))`)
|
|
||||||
p.P(p.varGen.Next(), ` := r.Int63()`)
|
|
||||||
p.P(`if r.Intn(2) == 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(p.varGen.Current(), ` *= -1`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(`, p.varGen.Current(), `))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`case 1:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(key))`)
|
|
||||||
p.P(`dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`case 2:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(key))`)
|
|
||||||
p.P(`ll := r.Intn(100)`)
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(ll))`)
|
|
||||||
p.P(`for j := 0; j < ll; j++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = append(dAtA, byte(r.Intn(256)))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`default:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = encodeVarintPopulate`, p.localName, `(dAtA, uint64(key))`)
|
|
||||||
p.P(`dAtA = append(dAtA, byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)), byte(r.Intn(256)))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return dAtA`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
p.P(`func encodeVarintPopulate`, p.localName, `(dAtA []byte, v uint64) []byte {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`for v >= 1<<7 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA = append(dAtA, uint8(uint64(v)&0x7f|0x80))`)
|
|
||||||
p.P(`v >>= 7`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`dAtA = append(dAtA, uint8(v))`)
|
|
||||||
p.P(`return dAtA`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewPlugin())
|
|
||||||
}
|
|
696
vendor/github.com/gogo/protobuf/plugin/size/size.go
generated
vendored
696
vendor/github.com/gogo/protobuf/plugin/size/size.go
generated
vendored
@ -1,696 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The size plugin generates a Size or ProtoSize method for each message.
|
|
||||||
This is useful with the MarshalTo method generated by the marshalto plugin and the
|
|
||||||
gogoproto.marshaler and gogoproto.marshaler_all extensions.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- sizer
|
|
||||||
- sizer_all
|
|
||||||
- protosizer
|
|
||||||
- protosizer_all
|
|
||||||
|
|
||||||
The size plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
And a benchmark given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- benchgen
|
|
||||||
- benchgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.sizer_all) = true;
|
|
||||||
|
|
||||||
message B {
|
|
||||||
option (gogoproto.description) = true;
|
|
||||||
optional A A = 1 [(gogoproto.nullable) = false, (gogoproto.embed) = true];
|
|
||||||
repeated bytes G = 2 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uint128", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the size plugin, will generate the following code:
|
|
||||||
|
|
||||||
func (m *B) Size() (n int) {
|
|
||||||
if m == nil {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
var l int
|
|
||||||
_ = l
|
|
||||||
l = m.A.Size()
|
|
||||||
n += 1 + l + sovExample(uint64(l))
|
|
||||||
if len(m.G) > 0 {
|
|
||||||
for _, e := range m.G {
|
|
||||||
l = e.Size()
|
|
||||||
n += 1 + l + sovExample(uint64(l))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if m.XXX_unrecognized != nil {
|
|
||||||
n += len(m.XXX_unrecognized)
|
|
||||||
}
|
|
||||||
return n
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestBSize(t *testing5.T) {
|
|
||||||
popr := math_rand5.New(math_rand5.NewSource(time5.Now().UnixNano()))
|
|
||||||
p := NewPopulatedB(popr, true)
|
|
||||||
dAtA, err := github_com_gogo_protobuf_proto2.Marshal(p)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
size := p.Size()
|
|
||||||
if len(dAtA) != size {
|
|
||||||
t.Fatalf("size %v != marshalled size %v", size, len(dAtA))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkBSize(b *testing5.B) {
|
|
||||||
popr := math_rand5.New(math_rand5.NewSource(616))
|
|
||||||
total := 0
|
|
||||||
pops := make([]*B, 1000)
|
|
||||||
for i := 0; i < 1000; i++ {
|
|
||||||
pops[i] = NewPopulatedB(popr, false)
|
|
||||||
}
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
total += pops[i%1000].Size()
|
|
||||||
}
|
|
||||||
b.SetBytes(int64(total / b.N))
|
|
||||||
}
|
|
||||||
|
|
||||||
The sovExample function is a size of varint function for the example.pb.go file.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package size
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"github.com/gogo/protobuf/vanity"
|
|
||||||
)
|
|
||||||
|
|
||||||
type size struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
atleastOne bool
|
|
||||||
localName string
|
|
||||||
typesPkg generator.Single
|
|
||||||
bitsPkg generator.Single
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewSize() *size {
|
|
||||||
return &size{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) Name() string {
|
|
||||||
return "size"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func wireToType(wire string) int {
|
|
||||||
switch wire {
|
|
||||||
case "fixed64":
|
|
||||||
return proto.WireFixed64
|
|
||||||
case "fixed32":
|
|
||||||
return proto.WireFixed32
|
|
||||||
case "varint":
|
|
||||||
return proto.WireVarint
|
|
||||||
case "bytes":
|
|
||||||
return proto.WireBytes
|
|
||||||
case "group":
|
|
||||||
return proto.WireBytes
|
|
||||||
case "zigzag32":
|
|
||||||
return proto.WireVarint
|
|
||||||
case "zigzag64":
|
|
||||||
return proto.WireVarint
|
|
||||||
}
|
|
||||||
panic("unreachable")
|
|
||||||
}
|
|
||||||
|
|
||||||
func keySize(fieldNumber int32, wireType int) int {
|
|
||||||
x := uint32(fieldNumber)<<3 | uint32(wireType)
|
|
||||||
size := 0
|
|
||||||
for size = 0; x > 127; size++ {
|
|
||||||
x >>= 7
|
|
||||||
}
|
|
||||||
size++
|
|
||||||
return size
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) sizeVarint() {
|
|
||||||
p.P(`
|
|
||||||
func sov`, p.localName, `(x uint64) (n int) {
|
|
||||||
return (`, p.bitsPkg.Use(), `.Len64(x | 1) + 6)/ 7
|
|
||||||
}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) sizeZigZag() {
|
|
||||||
p.P(`func soz`, p.localName, `(x uint64) (n int) {
|
|
||||||
return sov`, p.localName, `(uint64((x << 1) ^ uint64((int64(x) >> 63))))
|
|
||||||
}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) std(field *descriptor.FieldDescriptorProto, name string) (string, bool) {
|
|
||||||
ptr := ""
|
|
||||||
if gogoproto.IsNullable(field) {
|
|
||||||
ptr = "*"
|
|
||||||
}
|
|
||||||
if gogoproto.IsStdTime(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdTime(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdDuration(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdDuration(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdDouble(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdDouble(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdFloat(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdFloat(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdInt64(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdInt64(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdUInt64(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdUInt64(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdInt32(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdInt32(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdUInt32(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdUInt32(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdBool(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdBool(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdString(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdString(` + ptr + name + `)`, true
|
|
||||||
} else if gogoproto.IsStdBytes(field) {
|
|
||||||
return p.typesPkg.Use() + `.SizeOfStdBytes(` + ptr + name + `)`, true
|
|
||||||
}
|
|
||||||
return "", false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) generateField(proto3 bool, file *generator.FileDescriptor, message *generator.Descriptor, field *descriptor.FieldDescriptorProto, sizeName string) {
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
repeated := field.IsRepeated()
|
|
||||||
doNilCheck := gogoproto.NeedsNilCheck(proto3, field)
|
|
||||||
if repeated {
|
|
||||||
p.P(`if len(m.`, fieldname, `) > 0 {`)
|
|
||||||
p.In()
|
|
||||||
} else if doNilCheck {
|
|
||||||
p.P(`if m.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
}
|
|
||||||
packed := field.IsPacked() || (proto3 && field.IsPacked3())
|
|
||||||
_, wire := p.GoType(message, field)
|
|
||||||
wireType := wireToType(wire)
|
|
||||||
fieldNumber := field.GetNumber()
|
|
||||||
if packed {
|
|
||||||
wireType = proto.WireBytes
|
|
||||||
}
|
|
||||||
key := keySize(fieldNumber, wireType)
|
|
||||||
switch *field.Type {
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED64:
|
|
||||||
if packed {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)*8))`, `+len(m.`, fieldname, `)*8`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+8), `*len(m.`, fieldname, `)`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`if m.`, fieldname, ` != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+8))
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+8))
|
|
||||||
} else {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+8))
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED32:
|
|
||||||
if packed {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)*4))`, `+len(m.`, fieldname, `)*4`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+4), `*len(m.`, fieldname, `)`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`if m.`, fieldname, ` != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+4))
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+4))
|
|
||||||
} else {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+4))
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_INT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_ENUM,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_INT32:
|
|
||||||
if packed {
|
|
||||||
p.P(`l = 0`)
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`l+=sov`, p.localName, `(uint64(e))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(l))+l`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(e))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`if m.`, fieldname, ` != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(m.`, fieldname, `))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(*m.`, fieldname, `))`)
|
|
||||||
} else {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(m.`, fieldname, `))`)
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
if packed {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(len(m.`, fieldname, `)))`, `+len(m.`, fieldname, `)*1`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+1), `*len(m.`, fieldname, `)`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`if m.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+1))
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+1))
|
|
||||||
} else {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key+1))
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_STRING:
|
|
||||||
if repeated {
|
|
||||||
p.P(`for _, s := range m.`, fieldname, ` { `)
|
|
||||||
p.In()
|
|
||||||
p.P(`l = len(s)`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`l=len(m.`, fieldname, `)`)
|
|
||||||
p.P(`if l > 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`l=len(*m.`, fieldname, `)`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
} else {
|
|
||||||
p.P(`l=len(m.`, fieldname, `)`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_GROUP:
|
|
||||||
panic(fmt.Errorf("size does not support group %v", fieldname))
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
|
|
||||||
if p.IsMap(field) {
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
_, keywire := p.GoType(nil, m.KeyAliasField)
|
|
||||||
valuegoTyp, _ := p.GoType(nil, m.ValueField)
|
|
||||||
valuegoAliasTyp, valuewire := p.GoType(nil, m.ValueAliasField)
|
|
||||||
_, fieldwire := p.GoType(nil, field)
|
|
||||||
|
|
||||||
nullable, valuegoTyp, valuegoAliasTyp = generator.GoMapValueTypes(field, m.ValueField, valuegoTyp, valuegoAliasTyp)
|
|
||||||
|
|
||||||
fieldKeySize := keySize(field.GetNumber(), wireToType(fieldwire))
|
|
||||||
keyKeySize := keySize(1, wireToType(keywire))
|
|
||||||
valueKeySize := keySize(2, wireToType(valuewire))
|
|
||||||
p.P(`for k, v := range m.`, fieldname, ` { `)
|
|
||||||
p.In()
|
|
||||||
p.P(`_ = k`)
|
|
||||||
p.P(`_ = v`)
|
|
||||||
sum := []string{strconv.Itoa(keyKeySize)}
|
|
||||||
switch m.KeyField.GetType() {
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED64:
|
|
||||||
sum = append(sum, `8`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED32:
|
|
||||||
sum = append(sum, `4`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_INT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_ENUM,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_INT32:
|
|
||||||
sum = append(sum, `sov`+p.localName+`(uint64(k))`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
sum = append(sum, `1`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_STRING,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_BYTES:
|
|
||||||
sum = append(sum, `len(k)+sov`+p.localName+`(uint64(len(k)))`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_SINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
sum = append(sum, `soz`+p.localName+`(uint64(k))`)
|
|
||||||
}
|
|
||||||
switch m.ValueField.GetType() {
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_DOUBLE,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED64:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, strconv.Itoa(8))
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_FLOAT,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_FIXED32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SFIXED32:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, strconv.Itoa(4))
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_INT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_ENUM,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_INT32:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, `sov`+p.localName+`(uint64(v))`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, `1`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_STRING:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, `len(v)+sov`+p.localName+`(uint64(len(v)))`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BYTES:
|
|
||||||
if gogoproto.IsCustomType(field) {
|
|
||||||
p.P(`l = 0`)
|
|
||||||
if nullable {
|
|
||||||
p.P(`if v != nil {`)
|
|
||||||
p.In()
|
|
||||||
}
|
|
||||||
p.P(`l = v.`, sizeName, `()`)
|
|
||||||
p.P(`l += `, strconv.Itoa(valueKeySize), ` + sov`+p.localName+`(uint64(l))`)
|
|
||||||
if nullable {
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
sum = append(sum, `l`)
|
|
||||||
} else {
|
|
||||||
p.P(`l = 0`)
|
|
||||||
if proto3 {
|
|
||||||
p.P(`if len(v) > 0 {`)
|
|
||||||
} else {
|
|
||||||
p.P(`if v != nil {`)
|
|
||||||
}
|
|
||||||
p.In()
|
|
||||||
p.P(`l = `, strconv.Itoa(valueKeySize), ` + len(v)+sov`+p.localName+`(uint64(len(v)))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
sum = append(sum, `l`)
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_SINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, `soz`+p.localName+`(uint64(v))`)
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_MESSAGE:
|
|
||||||
stdSizeCall, stdOk := p.std(m.ValueAliasField, "v")
|
|
||||||
if nullable {
|
|
||||||
p.P(`l = 0`)
|
|
||||||
p.P(`if v != nil {`)
|
|
||||||
p.In()
|
|
||||||
if stdOk {
|
|
||||||
p.P(`l = `, stdSizeCall)
|
|
||||||
} else if valuegoTyp != valuegoAliasTyp {
|
|
||||||
p.P(`l = ((`, valuegoTyp, `)(v)).`, sizeName, `()`)
|
|
||||||
} else {
|
|
||||||
p.P(`l = v.`, sizeName, `()`)
|
|
||||||
}
|
|
||||||
p.P(`l += `, strconv.Itoa(valueKeySize), ` + sov`+p.localName+`(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
sum = append(sum, `l`)
|
|
||||||
} else {
|
|
||||||
if stdOk {
|
|
||||||
p.P(`l = `, stdSizeCall)
|
|
||||||
} else if valuegoTyp != valuegoAliasTyp {
|
|
||||||
p.P(`l = ((*`, valuegoTyp, `)(&v)).`, sizeName, `()`)
|
|
||||||
} else {
|
|
||||||
p.P(`l = v.`, sizeName, `()`)
|
|
||||||
}
|
|
||||||
sum = append(sum, strconv.Itoa(valueKeySize))
|
|
||||||
sum = append(sum, `l+sov`+p.localName+`(uint64(l))`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`mapEntrySize := `, strings.Join(sum, "+"))
|
|
||||||
p.P(`n+=mapEntrySize+`, fieldKeySize, `+sov`, p.localName, `(uint64(mapEntrySize))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` { `)
|
|
||||||
p.In()
|
|
||||||
stdSizeCall, stdOk := p.std(field, "e")
|
|
||||||
if stdOk {
|
|
||||||
p.P(`l=`, stdSizeCall)
|
|
||||||
} else {
|
|
||||||
p.P(`l=e.`, sizeName, `()`)
|
|
||||||
}
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
stdSizeCall, stdOk := p.std(field, "m."+fieldname)
|
|
||||||
if stdOk {
|
|
||||||
p.P(`l=`, stdSizeCall)
|
|
||||||
} else {
|
|
||||||
p.P(`l=m.`, fieldname, `.`, sizeName, `()`)
|
|
||||||
}
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_BYTES:
|
|
||||||
if !gogoproto.IsCustomType(field) {
|
|
||||||
if repeated {
|
|
||||||
p.P(`for _, b := range m.`, fieldname, ` { `)
|
|
||||||
p.In()
|
|
||||||
p.P(`l = len(b)`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`l=len(m.`, fieldname, `)`)
|
|
||||||
p.P(`if l > 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`l=len(m.`, fieldname, `)`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if repeated {
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` { `)
|
|
||||||
p.In()
|
|
||||||
p.P(`l=e.`, sizeName, `()`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else {
|
|
||||||
p.P(`l=m.`, fieldname, `.`, sizeName, `()`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+l+sov`, p.localName, `(uint64(l))`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case descriptor.FieldDescriptorProto_TYPE_SINT32,
|
|
||||||
descriptor.FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
if packed {
|
|
||||||
p.P(`l = 0`)
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`l+=soz`, p.localName, `(uint64(e))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+sov`, p.localName, `(uint64(l))+l`)
|
|
||||||
} else if repeated {
|
|
||||||
p.P(`for _, e := range m.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(e))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if proto3 {
|
|
||||||
p.P(`if m.`, fieldname, ` != 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(m.`, fieldname, `))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
} else if nullable {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(*m.`, fieldname, `))`)
|
|
||||||
} else {
|
|
||||||
p.P(`n+=`, strconv.Itoa(key), `+soz`, p.localName, `(uint64(m.`, fieldname, `))`)
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
panic("not implemented")
|
|
||||||
}
|
|
||||||
if repeated || doNilCheck {
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *size) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.atleastOne = false
|
|
||||||
p.localName = generator.FileName(file)
|
|
||||||
p.typesPkg = p.NewImport("github.com/gogo/protobuf/types")
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
p.bitsPkg = p.NewImport("math/bits")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = p.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
sizeName := ""
|
|
||||||
if gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) && gogoproto.IsProtoSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
fmt.Fprintf(os.Stderr, "ERROR: message %v cannot support both sizer and protosizer plugins\n", generator.CamelCase(*message.Name))
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
sizeName = "Size"
|
|
||||||
} else if gogoproto.IsProtoSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
sizeName = "ProtoSize"
|
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p.atleastOne = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (m *`, ccTypeName, `) `, sizeName, `() (n int) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if m == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`var l int`)
|
|
||||||
p.P(`_ = l`)
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
for _, field := range message.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
p.generateField(proto3, file, message, field, sizeName)
|
|
||||||
} else {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
p.P(`if m.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=m.`, fieldname, `.`, sizeName, `()`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`n += `, protoPkg.Use(), `.SizeOfInternalExtension(m)`)
|
|
||||||
} else {
|
|
||||||
p.P(`if m.XXX_extensions != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=len(m.XXX_extensions)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if m.XXX_unrecognized != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`n+=len(m.XXX_unrecognized)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`return n`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
|
|
||||||
//Generate Size methods for oneof fields
|
|
||||||
m := proto.Clone(message.DescriptorProto).(*descriptor.DescriptorProto)
|
|
||||||
for _, f := range m.Field {
|
|
||||||
oneof := f.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, f)
|
|
||||||
p.P(`func (m *`, ccTypeName, `) `, sizeName, `() (n int) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if m == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return 0`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`var l int`)
|
|
||||||
p.P(`_ = l`)
|
|
||||||
vanity.TurnOffNullableForNativeTypes(f)
|
|
||||||
p.generateField(false, file, message, f, sizeName)
|
|
||||||
p.P(`return n`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.atleastOne {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
p.sizeVarint()
|
|
||||||
p.sizeZigZag()
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewSize())
|
|
||||||
}
|
|
134
vendor/github.com/gogo/protobuf/plugin/size/sizetest.go
generated
vendored
134
vendor/github.com/gogo/protobuf/plugin/size/sizetest.go
generated
vendored
@ -1,134 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package size
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
protoPkg := imports.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = imports.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
sizeName := ""
|
|
||||||
if gogoproto.IsSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
sizeName = "Size"
|
|
||||||
} else if gogoproto.IsProtoSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
sizeName = "ProtoSize"
|
|
||||||
} else {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Test`, ccTypeName, sizeName, `(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`size2 := `, protoPkg.Use(), `.Size(p)`)
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(p)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`size := p.`, sizeName, `()`)
|
|
||||||
p.P(`if len(dAtA) != size {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Errorf("seed = %d, size %v != marshalled size %v", seed, size, len(dAtA))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if size2 != size {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Errorf("seed = %d, size %v != before marshal proto.Size %v", seed, size, size2)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`size3 := `, protoPkg.Use(), `.Size(p)`)
|
|
||||||
p.P(`if size3 != size {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Errorf("seed = %d, size %v != after marshal proto.Size %v", seed, size, size3)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Benchmark`, ccTypeName, sizeName, `(b *`, testingPkg.Use(), `.B) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`)
|
|
||||||
p.P(`total := 0`)
|
|
||||||
p.P(`pops := make([]*`, ccTypeName, `, 1000)`)
|
|
||||||
p.P(`for i := 0; i < 1000; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`b.ResetTimer()`)
|
|
||||||
p.P(`for i := 0; i < b.N; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`total += pops[i%1000].`, sizeName, `()`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`b.SetBytes(int64(total / b.N))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
347
vendor/github.com/gogo/protobuf/plugin/stringer/stringer.go
generated
vendored
347
vendor/github.com/gogo/protobuf/plugin/stringer/stringer.go
generated
vendored
@ -1,347 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The stringer plugin generates a String method for each message.
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- stringer
|
|
||||||
- stringer_all
|
|
||||||
|
|
||||||
The stringer plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.goproto_stringer_all) = false;
|
|
||||||
option (gogoproto.stringer_all) = true;
|
|
||||||
|
|
||||||
message A {
|
|
||||||
optional string Description = 1 [(gogoproto.nullable) = false];
|
|
||||||
optional int64 Number = 2 [(gogoproto.nullable) = false];
|
|
||||||
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the stringer stringer, will generate the following code:
|
|
||||||
|
|
||||||
func (this *A) String() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := strings.Join([]string{`&A{`,
|
|
||||||
`Description:` + fmt.Sprintf("%v", this.Description) + `,`,
|
|
||||||
`Number:` + fmt.Sprintf("%v", this.Number) + `,`,
|
|
||||||
`Id:` + fmt.Sprintf("%v", this.Id) + `,`,
|
|
||||||
`XXX_unrecognized:` + fmt.Sprintf("%v", this.XXX_unrecognized) + `,`,
|
|
||||||
`}`,
|
|
||||||
}, "")
|
|
||||||
return s
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestAStringer(t *testing4.T) {
|
|
||||||
popr := math_rand4.New(math_rand4.NewSource(time4.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, false)
|
|
||||||
s1 := p.String()
|
|
||||||
s2 := fmt1.Sprintf("%v", p)
|
|
||||||
if s1 != s2 {
|
|
||||||
t.Fatalf("String want %v got %v", s1, s2)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Typically fmt.Printf("%v") will stop to print when it reaches a pointer and
|
|
||||||
not print their values, while the generated String method will always print all values, recursively.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package stringer
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type stringer struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
atleastOne bool
|
|
||||||
localName string
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewStringer() *stringer {
|
|
||||||
return &stringer{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *stringer) Name() string {
|
|
||||||
return "stringer"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *stringer) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *stringer) Generate(file *generator.FileDescriptor) {
|
|
||||||
proto3 := gogoproto.IsProto3(file.FileDescriptorProto)
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
p.atleastOne = false
|
|
||||||
|
|
||||||
p.localName = generator.FileName(file)
|
|
||||||
|
|
||||||
fmtPkg := p.NewImport("fmt")
|
|
||||||
stringsPkg := p.NewImport("strings")
|
|
||||||
reflectPkg := p.NewImport("reflect")
|
|
||||||
sortKeysPkg := p.NewImport("github.com/gogo/protobuf/sortkeys")
|
|
||||||
protoPkg := p.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.IsStringer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.EnabledGoStringer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
panic("old string method needs to be disabled, please use gogoproto.goproto_stringer or gogoproto.goproto_stringer_all and set it to false")
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
p.atleastOne = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (this *`, ccTypeName, `) String() string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
for _, field := range message.Field {
|
|
||||||
if p.IsMap(field) || !field.IsRepeated() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if (field.IsMessage() && !gogoproto.IsCustomType(field)) || p.IsGroup(field) {
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
desc := p.ObjectNamed(field.GetTypeName())
|
|
||||||
msgname := p.TypeName(desc)
|
|
||||||
msgnames := strings.Split(msgname, ".")
|
|
||||||
typeName := msgnames[len(msgnames)-1]
|
|
||||||
fieldMessageDesc := file.GetMessage(msgname)
|
|
||||||
gogoStringer := false
|
|
||||||
if fieldMessageDesc != nil {
|
|
||||||
gogoStringer = gogoproto.IsStringer(file.FileDescriptorProto, fieldMessageDesc)
|
|
||||||
}
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
stringfunc := fmtPkg.Use() + `.Sprintf("%v", f)`
|
|
||||||
if gogoStringer {
|
|
||||||
stringfunc = `f.String()`
|
|
||||||
}
|
|
||||||
repeatedName := `repeatedStringFor` + fieldname
|
|
||||||
if nullable {
|
|
||||||
p.P(repeatedName, ` := "[]*`, typeName, `{"`)
|
|
||||||
} else {
|
|
||||||
p.P(repeatedName, ` := "[]`, typeName, `{"`)
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`for _, f := range `, `this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
if nullable {
|
|
||||||
p.P(repeatedName, " += ", stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1)", ` + ","`)
|
|
||||||
} else if gogoStringer {
|
|
||||||
p.P(repeatedName, " += ", stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1)", ` + ","`)
|
|
||||||
} else {
|
|
||||||
p.P(repeatedName, " += ", stringfunc, ` + ","`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(repeatedName, ` += "}"`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, field := range message.Field {
|
|
||||||
if !p.IsMap(field) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
|
|
||||||
m := p.GoMapType(nil, field)
|
|
||||||
mapgoTyp, keyField, keyAliasField := m.GoType, m.KeyField, m.KeyAliasField
|
|
||||||
keysName := `keysFor` + fieldname
|
|
||||||
keygoTyp, _ := p.GoType(nil, keyField)
|
|
||||||
keygoTyp = strings.Replace(keygoTyp, "*", "", 1)
|
|
||||||
keygoAliasTyp, _ := p.GoType(nil, keyAliasField)
|
|
||||||
keygoAliasTyp = strings.Replace(keygoAliasTyp, "*", "", 1)
|
|
||||||
keyCapTyp := generator.CamelCase(keygoTyp)
|
|
||||||
p.P(keysName, ` := make([]`, keygoTyp, `, 0, len(this.`, fieldname, `))`)
|
|
||||||
p.P(`for k, _ := range this.`, fieldname, ` {`)
|
|
||||||
p.In()
|
|
||||||
if keygoAliasTyp == keygoTyp {
|
|
||||||
p.P(keysName, ` = append(`, keysName, `, k)`)
|
|
||||||
} else {
|
|
||||||
p.P(keysName, ` = append(`, keysName, `, `, keygoTyp, `(k))`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(sortKeysPkg.Use(), `.`, keyCapTyp, `s(`, keysName, `)`)
|
|
||||||
mapName := `mapStringFor` + fieldname
|
|
||||||
p.P(mapName, ` := "`, mapgoTyp, `{"`)
|
|
||||||
p.P(`for _, k := range `, keysName, ` {`)
|
|
||||||
p.In()
|
|
||||||
if keygoAliasTyp == keygoTyp {
|
|
||||||
p.P(mapName, ` += fmt.Sprintf("%v: %v,", k, this.`, fieldname, `[k])`)
|
|
||||||
} else {
|
|
||||||
p.P(mapName, ` += fmt.Sprintf("%v: %v,", k, this.`, fieldname, `[`, keygoAliasTyp, `(k)])`)
|
|
||||||
}
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(mapName, ` += "}"`)
|
|
||||||
}
|
|
||||||
p.P("s := ", stringsPkg.Use(), ".Join([]string{`&", ccTypeName, "{`,")
|
|
||||||
oneofs := make(map[string]struct{})
|
|
||||||
for _, field := range message.Field {
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
repeated := field.IsRepeated()
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if oneof {
|
|
||||||
if _, ok := oneofs[fieldname]; ok {
|
|
||||||
continue
|
|
||||||
} else {
|
|
||||||
oneofs[fieldname] = struct{}{}
|
|
||||||
}
|
|
||||||
p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,")
|
|
||||||
} else if p.IsMap(field) {
|
|
||||||
mapName := `mapStringFor` + fieldname
|
|
||||||
p.P("`", fieldname, ":`", ` + `, mapName, " + `,", "`,")
|
|
||||||
} else if (field.IsMessage() && !gogoproto.IsCustomType(field)) || p.IsGroup(field) {
|
|
||||||
desc := p.ObjectNamed(field.GetTypeName())
|
|
||||||
msgname := p.TypeName(desc)
|
|
||||||
msgnames := strings.Split(msgname, ".")
|
|
||||||
typeName := msgnames[len(msgnames)-1]
|
|
||||||
fieldMessageDesc := file.GetMessage(msgname)
|
|
||||||
gogoStringer := false
|
|
||||||
if fieldMessageDesc != nil {
|
|
||||||
gogoStringer = gogoproto.IsStringer(file.FileDescriptorProto, fieldMessageDesc)
|
|
||||||
}
|
|
||||||
stringfunc := fmtPkg.Use() + `.Sprintf("%v", this.` + fieldname + `)`
|
|
||||||
if gogoStringer {
|
|
||||||
stringfunc = `this.` + fieldname + `.String()`
|
|
||||||
}
|
|
||||||
if nullable && !repeated {
|
|
||||||
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,")
|
|
||||||
} else if repeated {
|
|
||||||
repeatedName := `repeatedStringFor` + fieldname
|
|
||||||
p.P("`", fieldname, ":`", ` + `, repeatedName, " + `,", "`,")
|
|
||||||
} else {
|
|
||||||
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, stringsPkg.Use(), `.Replace(`, stringfunc, `, "`, typeName, `","`, msgname, `"`, ", 1),`&`,``,1) + `,", "`,")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if nullable && !repeated && !proto3 {
|
|
||||||
p.P("`", fieldname, ":`", ` + valueToString`, p.localName, `(this.`, fieldname, ") + `,", "`,")
|
|
||||||
} else {
|
|
||||||
p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
if gogoproto.HasExtensionsMap(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P("`XXX_InternalExtensions:` + ", protoPkg.Use(), ".StringFromInternalExtension(this) + `,`,")
|
|
||||||
} else {
|
|
||||||
p.P("`XXX_extensions:` + ", protoPkg.Use(), ".StringFromExtensionsBytes(this.XXX_extensions) + `,`,")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if gogoproto.HasUnrecognized(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P("`XXX_unrecognized:` + ", fmtPkg.Use(), `.Sprintf("%v", this.XXX_unrecognized) + `, "`,`,")
|
|
||||||
}
|
|
||||||
p.P("`}`,")
|
|
||||||
p.P(`}`, `,""`, ")")
|
|
||||||
p.P(`return s`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
//Generate String methods for oneof fields
|
|
||||||
for _, field := range message.Field {
|
|
||||||
oneof := field.OneofIndex != nil
|
|
||||||
if !oneof {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
ccTypeName := p.OneOfTypeName(message, field)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) String() string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`if this == nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P("s := ", stringsPkg.Use(), ".Join([]string{`&", ccTypeName, "{`,")
|
|
||||||
fieldname := p.GetOneOfFieldName(message, field)
|
|
||||||
if field.IsMessage() || p.IsGroup(field) {
|
|
||||||
desc := p.ObjectNamed(field.GetTypeName())
|
|
||||||
msgname := p.TypeName(desc)
|
|
||||||
msgnames := strings.Split(msgname, ".")
|
|
||||||
typeName := msgnames[len(msgnames)-1]
|
|
||||||
p.P("`", fieldname, ":`", ` + `, stringsPkg.Use(), `.Replace(`, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, `), "`, typeName, `","`, msgname, `"`, ", 1) + `,", "`,")
|
|
||||||
} else {
|
|
||||||
p.P("`", fieldname, ":`", ` + `, fmtPkg.Use(), `.Sprintf("%v", this.`, fieldname, ") + `,", "`,")
|
|
||||||
}
|
|
||||||
p.P("`}`,")
|
|
||||||
p.P(`}`, `,""`, ")")
|
|
||||||
p.P(`return s`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if !p.atleastOne {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
p.P(`func valueToString`, p.localName, `(v interface{}) string {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`rv := `, reflectPkg.Use(), `.ValueOf(v)`)
|
|
||||||
p.P(`if rv.IsNil() {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return "nil"`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`pv := `, reflectPkg.Use(), `.Indirect(rv).Interface()`)
|
|
||||||
p.P(`return `, fmtPkg.Use(), `.Sprintf("*%v", pv)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewStringer())
|
|
||||||
}
|
|
83
vendor/github.com/gogo/protobuf/plugin/stringer/stringertest.go
generated
vendored
83
vendor/github.com/gogo/protobuf/plugin/stringer/stringertest.go
generated
vendored
@ -1,83 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package stringer
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
fmtPkg := imports.NewImport("fmt")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if !gogoproto.IsStringer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Test`, ccTypeName, `Stringer(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`s1 := p.String()`)
|
|
||||||
p.P(`s2 := `, fmtPkg.Use(), `.Sprintf("%v", p)`)
|
|
||||||
p.P(`if s1 != s2 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("String want %v got %v", s1, s2)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
608
vendor/github.com/gogo/protobuf/plugin/testgen/testgen.go
generated
vendored
608
vendor/github.com/gogo/protobuf/plugin/testgen/testgen.go
generated
vendored
@ -1,608 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The testgen plugin generates Test and Benchmark functions for each message.
|
|
||||||
|
|
||||||
Tests are enabled using the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Benchmarks are enabled using the following extensions:
|
|
||||||
|
|
||||||
- benchgen
|
|
||||||
- benchgen_all
|
|
||||||
|
|
||||||
Let us look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
option (gogoproto.testgen_all) = true;
|
|
||||||
option (gogoproto.benchgen_all) = true;
|
|
||||||
|
|
||||||
message A {
|
|
||||||
optional string Description = 1 [(gogoproto.nullable) = false];
|
|
||||||
optional int64 Number = 2 [(gogoproto.nullable) = false];
|
|
||||||
optional bytes Id = 3 [(gogoproto.customtype) = "github.com/gogo/protobuf/test/custom.Uuid", (gogoproto.nullable) = false];
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the testgen plugin, will generate the following test code:
|
|
||||||
|
|
||||||
func TestAProto(t *testing.T) {
|
|
||||||
popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, false)
|
|
||||||
dAtA, err := github_com_gogo_protobuf_proto.Marshal(p)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
msg := &A{}
|
|
||||||
if err := github_com_gogo_protobuf_proto.Unmarshal(dAtA, msg); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
for i := range dAtA {
|
|
||||||
dAtA[i] = byte(popr.Intn(256))
|
|
||||||
}
|
|
||||||
if err := p.VerboseEqual(msg); err != nil {
|
|
||||||
t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)
|
|
||||||
}
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Proto %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkAProtoMarshal(b *testing.B) {
|
|
||||||
popr := math_rand.New(math_rand.NewSource(616))
|
|
||||||
total := 0
|
|
||||||
pops := make([]*A, 10000)
|
|
||||||
for i := 0; i < 10000; i++ {
|
|
||||||
pops[i] = NewPopulatedA(popr, false)
|
|
||||||
}
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
dAtA, err := github_com_gogo_protobuf_proto.Marshal(pops[i%10000])
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
total += len(dAtA)
|
|
||||||
}
|
|
||||||
b.SetBytes(int64(total / b.N))
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkAProtoUnmarshal(b *testing.B) {
|
|
||||||
popr := math_rand.New(math_rand.NewSource(616))
|
|
||||||
total := 0
|
|
||||||
datas := make([][]byte, 10000)
|
|
||||||
for i := 0; i < 10000; i++ {
|
|
||||||
dAtA, err := github_com_gogo_protobuf_proto.Marshal(NewPopulatedA(popr, false))
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
datas[i] = dAtA
|
|
||||||
}
|
|
||||||
msg := &A{}
|
|
||||||
b.ResetTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
total += len(datas[i%10000])
|
|
||||||
if err := github_com_gogo_protobuf_proto.Unmarshal(datas[i%10000], msg); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
b.SetBytes(int64(total / b.N))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
func TestAJSON(t *testing1.T) {
|
|
||||||
popr := math_rand1.New(math_rand1.NewSource(time1.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, true)
|
|
||||||
jsondata, err := encoding_json.Marshal(p)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
msg := &A{}
|
|
||||||
err = encoding_json.Unmarshal(jsondata, msg)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := p.VerboseEqual(msg); err != nil {
|
|
||||||
t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)
|
|
||||||
}
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Json Equal %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAProtoText(t *testing2.T) {
|
|
||||||
popr := math_rand2.New(math_rand2.NewSource(time2.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, true)
|
|
||||||
dAtA := github_com_gogo_protobuf_proto1.MarshalTextString(p)
|
|
||||||
msg := &A{}
|
|
||||||
if err := github_com_gogo_protobuf_proto1.UnmarshalText(dAtA, msg); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := p.VerboseEqual(msg); err != nil {
|
|
||||||
t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)
|
|
||||||
}
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Proto %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestAProtoCompactText(t *testing2.T) {
|
|
||||||
popr := math_rand2.New(math_rand2.NewSource(time2.Now().UnixNano()))
|
|
||||||
p := NewPopulatedA(popr, true)
|
|
||||||
dAtA := github_com_gogo_protobuf_proto1.CompactTextString(p)
|
|
||||||
msg := &A{}
|
|
||||||
if err := github_com_gogo_protobuf_proto1.UnmarshalText(dAtA, msg); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := p.VerboseEqual(msg); err != nil {
|
|
||||||
t.Fatalf("%#v !VerboseProto %#v, since %v", msg, p, err)
|
|
||||||
}
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Proto %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Other registered tests are also generated.
|
|
||||||
Tests are registered to this test plugin by calling the following function.
|
|
||||||
|
|
||||||
func RegisterTestPlugin(newFunc NewTestPlugin)
|
|
||||||
|
|
||||||
where NewTestPlugin is:
|
|
||||||
|
|
||||||
type NewTestPlugin func(g *generator.Generator) TestPlugin
|
|
||||||
|
|
||||||
and TestPlugin is an interface:
|
|
||||||
|
|
||||||
type TestPlugin interface {
|
|
||||||
Generate(imports generator.PluginImports, file *generator.FileDescriptor) (used bool)
|
|
||||||
}
|
|
||||||
|
|
||||||
Plugins that use this interface include:
|
|
||||||
|
|
||||||
- populate
|
|
||||||
- gostring
|
|
||||||
- equal
|
|
||||||
- union
|
|
||||||
- and more
|
|
||||||
|
|
||||||
Please look at these plugins as examples of how to create your own.
|
|
||||||
A good idea is to let each plugin generate its own tests.
|
|
||||||
|
|
||||||
*/
|
|
||||||
package testgen
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type TestPlugin interface {
|
|
||||||
Generate(imports generator.PluginImports, file *generator.FileDescriptor) (used bool)
|
|
||||||
}
|
|
||||||
|
|
||||||
type NewTestPlugin func(g *generator.Generator) TestPlugin
|
|
||||||
|
|
||||||
var testplugins = make([]NewTestPlugin, 0)
|
|
||||||
|
|
||||||
func RegisterTestPlugin(newFunc NewTestPlugin) {
|
|
||||||
testplugins = append(testplugins, newFunc)
|
|
||||||
}
|
|
||||||
|
|
||||||
type plugin struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
tests []TestPlugin
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPlugin() *plugin {
|
|
||||||
return &plugin{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Name() string {
|
|
||||||
return "testgen"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
p.tests = make([]TestPlugin, 0, len(testplugins))
|
|
||||||
for i := range testplugins {
|
|
||||||
p.tests = append(p.tests, testplugins[i](g))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *plugin) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
atLeastOne := false
|
|
||||||
for i := range p.tests {
|
|
||||||
used := p.tests[i].Generate(p.PluginImports, file)
|
|
||||||
if used {
|
|
||||||
atLeastOne = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if atLeastOne {
|
|
||||||
p.P(`//These tests are generated by github.com/gogo/protobuf/plugin/testgen`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type testProto struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func newProto(g *generator.Generator) TestPlugin {
|
|
||||||
return &testProto{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *testProto) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
protoPkg := imports.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = imports.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
|
|
||||||
p.P(`func Test`, ccTypeName, `Proto(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(p)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`littlefuzz := make([]byte, len(dAtA))`)
|
|
||||||
p.P(`copy(littlefuzz, dAtA)`)
|
|
||||||
p.P(`for i := range dAtA {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA[i] = byte(popr.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if len(littlefuzz) > 0 {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`fuzzamount := 100`)
|
|
||||||
p.P(`for i := 0; i < fuzzamount; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`littlefuzz[popr.Intn(len(littlefuzz))] = byte(popr.Intn(256))`)
|
|
||||||
p.P(`littlefuzz = append(littlefuzz, byte(popr.Intn(256)))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`// shouldn't panic`)
|
|
||||||
p.P(`_ = `, protoPkg.Use(), `.Unmarshal(littlefuzz, msg)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
if gogoproto.IsMarshaler(file.FileDescriptorProto, message.DescriptorProto) || gogoproto.IsUnsafeMarshaler(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`func Test`, ccTypeName, `MarshalTo(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
if gogoproto.IsProtoSizer(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`size := p.ProtoSize()`)
|
|
||||||
} else {
|
|
||||||
p.P(`size := p.Size()`)
|
|
||||||
}
|
|
||||||
p.P(`dAtA := make([]byte, size)`)
|
|
||||||
p.P(`for i := range dAtA {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA[i] = byte(popr.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`_, err := p.MarshalTo(dAtA)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`for i := range dAtA {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA[i] = byte(popr.Intn(256))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if gogoproto.HasBenchGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Benchmark`, ccTypeName, `ProtoMarshal(b *`, testingPkg.Use(), `.B) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`)
|
|
||||||
p.P(`total := 0`)
|
|
||||||
p.P(`pops := make([]*`, ccTypeName, `, 10000)`)
|
|
||||||
p.P(`for i := 0; i < 10000; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`pops[i] = NewPopulated`, ccTypeName, `(popr, false)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`b.ResetTimer()`)
|
|
||||||
p.P(`for i := 0; i < b.N; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(pops[i%10000])`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`total += len(dAtA)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`b.SetBytes(int64(total / b.N))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
|
|
||||||
p.P(`func Benchmark`, ccTypeName, `ProtoUnmarshal(b *`, testingPkg.Use(), `.B) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(616))`)
|
|
||||||
p.P(`total := 0`)
|
|
||||||
p.P(`datas := make([][]byte, 10000)`)
|
|
||||||
p.P(`for i := 0; i < 10000; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`dAtA, err := `, protoPkg.Use(), `.Marshal(NewPopulated`, ccTypeName, `(popr, false))`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`datas[i] = dAtA`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`b.ResetTimer()`)
|
|
||||||
p.P(`for i := 0; i < b.N; i++ {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`total += len(datas[i%10000])`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.Unmarshal(datas[i%10000], msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`panic(err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`b.SetBytes(int64(total / b.N))`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
type testJson struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func newJson(g *generator.Generator) TestPlugin {
|
|
||||||
return &testJson{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *testJson) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
jsonPkg := imports.NewImport("github.com/gogo/protobuf/jsonpb")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
p.P(`func Test`, ccTypeName, `JSON(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`marshaler := `, jsonPkg.Use(), `.Marshaler{}`)
|
|
||||||
p.P(`jsondata, err := marshaler.MarshalToString(p)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`err = `, jsonPkg.Use(), `.UnmarshalString(jsondata, msg)`)
|
|
||||||
p.P(`if err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !Json Equal %#v", seed, msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
type testText struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func newText(g *generator.Generator) TestPlugin {
|
|
||||||
return &testText{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *testText) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
protoPkg := imports.NewImport("github.com/gogo/protobuf/proto")
|
|
||||||
if !gogoproto.ImportsGoGoProto(file.FileDescriptorProto) {
|
|
||||||
protoPkg = imports.NewImport("github.com/golang/protobuf/proto")
|
|
||||||
}
|
|
||||||
//fmtPkg := imports.NewImport("fmt")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
used = true
|
|
||||||
|
|
||||||
p.P(`func Test`, ccTypeName, `ProtoText(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`dAtA := `, protoPkg.Use(), `.MarshalTextString(p)`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.UnmarshalText(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
|
|
||||||
p.P(`func Test`, ccTypeName, `ProtoCompactText(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`seed := `, timePkg.Use(), `.Now().UnixNano()`)
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(seed))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`dAtA := `, protoPkg.Use(), `.CompactTextString(p)`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if err := `, protoPkg.Use(), `.UnmarshalText(dAtA, msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, err = %v", seed, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
if gogoproto.HasVerboseEqual(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
p.P(`if err := p.VerboseEqual(msg); err != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !VerboseProto %#v, since %v", seed, msg, p, err)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("seed = %d, %#v !Proto %#v", seed, msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P()
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
RegisterTestPlugin(newProto)
|
|
||||||
RegisterTestPlugin(newJson)
|
|
||||||
RegisterTestPlugin(newText)
|
|
||||||
}
|
|
209
vendor/github.com/gogo/protobuf/plugin/union/union.go
generated
vendored
209
vendor/github.com/gogo/protobuf/plugin/union/union.go
generated
vendored
@ -1,209 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
The onlyone plugin generates code for the onlyone extension.
|
|
||||||
All fields must be nullable and only one of the fields may be set, like a union.
|
|
||||||
Two methods are generated
|
|
||||||
|
|
||||||
GetValue() interface{}
|
|
||||||
|
|
||||||
and
|
|
||||||
|
|
||||||
SetValue(v interface{}) (set bool)
|
|
||||||
|
|
||||||
These provide easier interaction with a onlyone.
|
|
||||||
|
|
||||||
The onlyone extension is not called union as this causes compile errors in the C++ generated code.
|
|
||||||
There can only be one ;)
|
|
||||||
|
|
||||||
It is enabled by the following extensions:
|
|
||||||
|
|
||||||
- onlyone
|
|
||||||
- onlyone_all
|
|
||||||
|
|
||||||
The onlyone plugin also generates a test given it is enabled using one of the following extensions:
|
|
||||||
|
|
||||||
- testgen
|
|
||||||
- testgen_all
|
|
||||||
|
|
||||||
Lets look at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/example.proto
|
|
||||||
|
|
||||||
Btw all the output can be seen at:
|
|
||||||
|
|
||||||
github.com/gogo/protobuf/test/example/*
|
|
||||||
|
|
||||||
The following message:
|
|
||||||
|
|
||||||
message U {
|
|
||||||
option (gogoproto.onlyone) = true;
|
|
||||||
optional A A = 1;
|
|
||||||
optional B B = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
given to the onlyone plugin, will generate code which looks a lot like this:
|
|
||||||
|
|
||||||
func (this *U) GetValue() interface{} {
|
|
||||||
if this.A != nil {
|
|
||||||
return this.A
|
|
||||||
}
|
|
||||||
if this.B != nil {
|
|
||||||
return this.B
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *U) SetValue(value interface{}) bool {
|
|
||||||
switch vt := value.(type) {
|
|
||||||
case *A:
|
|
||||||
this.A = vt
|
|
||||||
case *B:
|
|
||||||
this.B = vt
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
and the following test code:
|
|
||||||
|
|
||||||
func TestUUnion(t *testing.T) {
|
|
||||||
popr := math_rand.New(math_rand.NewSource(time.Now().UnixNano()))
|
|
||||||
p := NewPopulatedU(popr)
|
|
||||||
v := p.GetValue()
|
|
||||||
msg := &U{}
|
|
||||||
if !msg.SetValue(v) {
|
|
||||||
t.Fatalf("Union: Could not set Value")
|
|
||||||
}
|
|
||||||
if !p.Equal(msg) {
|
|
||||||
t.Fatalf("%#v !Union Equal %#v", msg, p)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
package union
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type union struct {
|
|
||||||
*generator.Generator
|
|
||||||
generator.PluginImports
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewUnion() *union {
|
|
||||||
return &union{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *union) Name() string {
|
|
||||||
return "union"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *union) Init(g *generator.Generator) {
|
|
||||||
p.Generator = g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *union) Generate(file *generator.FileDescriptor) {
|
|
||||||
p.PluginImports = generator.NewPluginImports(p.Generator)
|
|
||||||
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.IsUnion(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.HasExtension() {
|
|
||||||
panic("onlyone does not currently support extensions")
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
p.P(`func (this *`, ccTypeName, `) GetValue() interface{} {`)
|
|
||||||
p.In()
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if fieldname == "Value" {
|
|
||||||
panic("cannot have a onlyone message " + ccTypeName + " with a field named Value")
|
|
||||||
}
|
|
||||||
p.P(`if this.`, fieldname, ` != nil {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return this.`, fieldname)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
p.P(`return nil`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(``)
|
|
||||||
p.P(`func (this *`, ccTypeName, `) SetValue(value interface{}) bool {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`switch vt := value.(type) {`)
|
|
||||||
p.In()
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
p.P(`case `, goTyp, `:`)
|
|
||||||
p.In()
|
|
||||||
p.P(`this.`, fieldname, ` = vt`)
|
|
||||||
p.Out()
|
|
||||||
}
|
|
||||||
p.P(`default:`)
|
|
||||||
p.In()
|
|
||||||
for _, field := range message.Field {
|
|
||||||
fieldname := p.GetFieldName(message, field)
|
|
||||||
if field.IsMessage() {
|
|
||||||
goTyp, _ := p.GoType(message, field)
|
|
||||||
obj := p.ObjectNamed(field.GetTypeName()).(*generator.Descriptor)
|
|
||||||
|
|
||||||
if gogoproto.IsUnion(obj.File().FileDescriptorProto, obj.DescriptorProto) {
|
|
||||||
p.P(`this.`, fieldname, ` = new(`, generator.GoTypeToName(goTyp), `)`)
|
|
||||||
p.P(`if set := this.`, fieldname, `.SetValue(value); set {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`return true`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`this.`, fieldname, ` = nil`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
p.P(`return false`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`return true`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(NewUnion())
|
|
||||||
}
|
|
86
vendor/github.com/gogo/protobuf/plugin/union/uniontest.go
generated
vendored
86
vendor/github.com/gogo/protobuf/plugin/union/uniontest.go
generated
vendored
@ -1,86 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package union
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/plugin/testgen"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
type test struct {
|
|
||||||
*generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewTest(g *generator.Generator) testgen.TestPlugin {
|
|
||||||
return &test{g}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *test) Generate(imports generator.PluginImports, file *generator.FileDescriptor) bool {
|
|
||||||
used := false
|
|
||||||
randPkg := imports.NewImport("math/rand")
|
|
||||||
timePkg := imports.NewImport("time")
|
|
||||||
testingPkg := imports.NewImport("testing")
|
|
||||||
for _, message := range file.Messages() {
|
|
||||||
if !gogoproto.IsUnion(file.FileDescriptorProto, message.DescriptorProto) ||
|
|
||||||
!gogoproto.HasTestGen(file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if message.DescriptorProto.GetOptions().GetMapEntry() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
used = true
|
|
||||||
ccTypeName := generator.CamelCaseSlice(message.TypeName())
|
|
||||||
|
|
||||||
p.P(`func Test`, ccTypeName, `OnlyOne(t *`, testingPkg.Use(), `.T) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`popr := `, randPkg.Use(), `.New(`, randPkg.Use(), `.NewSource(`, timePkg.Use(), `.Now().UnixNano()))`)
|
|
||||||
p.P(`p := NewPopulated`, ccTypeName, `(popr, true)`)
|
|
||||||
p.P(`v := p.GetValue()`)
|
|
||||||
p.P(`msg := &`, ccTypeName, `{}`)
|
|
||||||
p.P(`if !msg.SetValue(v) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("OnlyOne: Could not set Value")`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.P(`if !p.Equal(msg) {`)
|
|
||||||
p.In()
|
|
||||||
p.P(`t.Fatalf("%#v !OnlyOne Equal %#v", msg, p)`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
p.Out()
|
|
||||||
p.P(`}`)
|
|
||||||
|
|
||||||
}
|
|
||||||
return used
|
|
||||||
}
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
testgen.RegisterTestPlugin(NewTest)
|
|
||||||
}
|
|
1657
vendor/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go
generated
vendored
1657
vendor/github.com/gogo/protobuf/plugin/unmarshal/unmarshal.go
generated
vendored
File diff suppressed because it is too large
Load Diff
41
vendor/github.com/gogo/protobuf/protoc-gen-gogo/Makefile
generated
vendored
41
vendor/github.com/gogo/protobuf/protoc-gen-gogo/Makefile
generated
vendored
@ -1,41 +0,0 @@
|
|||||||
# Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
#
|
|
||||||
# Copyright 2010 The Go Authors. All rights reserved.
|
|
||||||
# https://github.com/golang/protobuf
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are
|
|
||||||
# met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following disclaimer
|
|
||||||
# in the documentation and/or other materials provided with the
|
|
||||||
# distribution.
|
|
||||||
# * Neither the name of Google Inc. nor the names of its
|
|
||||||
# contributors may be used to endorse or promote products derived from
|
|
||||||
# this software without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
all: test
|
|
||||||
|
|
||||||
test:
|
|
||||||
go test
|
|
||||||
make -C testdata test
|
|
||||||
|
|
||||||
regenerate:
|
|
||||||
go test --regenerate
|
|
||||||
make -C descriptor regenerate
|
|
||||||
make -C plugin regenerate
|
|
36
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile
generated
vendored
36
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/Makefile
generated
vendored
@ -1,36 +0,0 @@
|
|||||||
# Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
#
|
|
||||||
# Copyright 2010 The Go Authors. All rights reserved.
|
|
||||||
# https://github.com/golang/protobuf
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions are
|
|
||||||
# met:
|
|
||||||
#
|
|
||||||
# * Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# * Redistributions in binary form must reproduce the above
|
|
||||||
# copyright notice, this list of conditions and the following disclaimer
|
|
||||||
# in the documentation and/or other materials provided with the
|
|
||||||
# distribution.
|
|
||||||
# * Neither the name of Google Inc. nor the names of its
|
|
||||||
# contributors may be used to endorse or promote products derived from
|
|
||||||
# this software without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
regenerate:
|
|
||||||
go install github.com/gogo/protobuf/protoc-gen-gogo
|
|
||||||
go install github.com/gogo/protobuf/protoc-gen-gostring
|
|
||||||
protoc --gogo_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto
|
|
||||||
protoc --gostring_out=. -I=../../protobuf/google/protobuf ../../protobuf/google/protobuf/descriptor.proto
|
|
118
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go
generated
vendored
118
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.go
generated
vendored
@ -1,118 +0,0 @@
|
|||||||
// Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
//
|
|
||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
|
||||||
// https://github.com/golang/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
// Package descriptor provides functions for obtaining protocol buffer
|
|
||||||
// descriptors for generated Go types.
|
|
||||||
//
|
|
||||||
// These functions cannot go in package proto because they depend on the
|
|
||||||
// generated protobuf descriptor messages, which themselves depend on proto.
|
|
||||||
package descriptor
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"compress/gzip"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
// extractFile extracts a FileDescriptorProto from a gzip'd buffer.
|
|
||||||
func extractFile(gz []byte) (*FileDescriptorProto, error) {
|
|
||||||
r, err := gzip.NewReader(bytes.NewReader(gz))
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to open gzip reader: %v", err)
|
|
||||||
}
|
|
||||||
defer r.Close()
|
|
||||||
|
|
||||||
b, err := ioutil.ReadAll(r)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("failed to uncompress descriptor: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fd := new(FileDescriptorProto)
|
|
||||||
if err := proto.Unmarshal(b, fd); err != nil {
|
|
||||||
return nil, fmt.Errorf("malformed FileDescriptorProto: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return fd, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Message is a proto.Message with a method to return its descriptor.
|
|
||||||
//
|
|
||||||
// Message types generated by the protocol compiler always satisfy
|
|
||||||
// the Message interface.
|
|
||||||
type Message interface {
|
|
||||||
proto.Message
|
|
||||||
Descriptor() ([]byte, []int)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ForMessage returns a FileDescriptorProto and a DescriptorProto from within it
|
|
||||||
// describing the given message.
|
|
||||||
func ForMessage(msg Message) (fd *FileDescriptorProto, md *DescriptorProto) {
|
|
||||||
gz, path := msg.Descriptor()
|
|
||||||
fd, err := extractFile(gz)
|
|
||||||
if err != nil {
|
|
||||||
panic(fmt.Sprintf("invalid FileDescriptorProto for %T: %v", msg, err))
|
|
||||||
}
|
|
||||||
|
|
||||||
md = fd.MessageType[path[0]]
|
|
||||||
for _, i := range path[1:] {
|
|
||||||
md = md.NestedType[i]
|
|
||||||
}
|
|
||||||
return fd, md
|
|
||||||
}
|
|
||||||
|
|
||||||
// Is this field a scalar numeric type?
|
|
||||||
func (field *FieldDescriptorProto) IsScalar() bool {
|
|
||||||
if field.Type == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
switch *field.Type {
|
|
||||||
case FieldDescriptorProto_TYPE_DOUBLE,
|
|
||||||
FieldDescriptorProto_TYPE_FLOAT,
|
|
||||||
FieldDescriptorProto_TYPE_INT64,
|
|
||||||
FieldDescriptorProto_TYPE_UINT64,
|
|
||||||
FieldDescriptorProto_TYPE_INT32,
|
|
||||||
FieldDescriptorProto_TYPE_FIXED64,
|
|
||||||
FieldDescriptorProto_TYPE_FIXED32,
|
|
||||||
FieldDescriptorProto_TYPE_BOOL,
|
|
||||||
FieldDescriptorProto_TYPE_UINT32,
|
|
||||||
FieldDescriptorProto_TYPE_ENUM,
|
|
||||||
FieldDescriptorProto_TYPE_SFIXED32,
|
|
||||||
FieldDescriptorProto_TYPE_SFIXED64,
|
|
||||||
FieldDescriptorProto_TYPE_SINT32,
|
|
||||||
FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
return true
|
|
||||||
default:
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
2865
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
generated
vendored
2865
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor.pb.go
generated
vendored
File diff suppressed because it is too large
Load Diff
752
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go
generated
vendored
752
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/descriptor_gostring.gen.go
generated
vendored
@ -1,752 +0,0 @@
|
|||||||
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
|
||||||
// source: descriptor.proto
|
|
||||||
|
|
||||||
package descriptor
|
|
||||||
|
|
||||||
import (
|
|
||||||
fmt "fmt"
|
|
||||||
github_com_gogo_protobuf_proto "github.com/gogo/protobuf/proto"
|
|
||||||
proto "github.com/gogo/protobuf/proto"
|
|
||||||
math "math"
|
|
||||||
reflect "reflect"
|
|
||||||
sort "sort"
|
|
||||||
strconv "strconv"
|
|
||||||
strings "strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
|
||||||
var _ = proto.Marshal
|
|
||||||
var _ = fmt.Errorf
|
|
||||||
var _ = math.Inf
|
|
||||||
|
|
||||||
func (this *FileDescriptorSet) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 5)
|
|
||||||
s = append(s, "&descriptor.FileDescriptorSet{")
|
|
||||||
if this.File != nil {
|
|
||||||
s = append(s, "File: "+fmt.Sprintf("%#v", this.File)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *FileDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 16)
|
|
||||||
s = append(s, "&descriptor.FileDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Package != nil {
|
|
||||||
s = append(s, "Package: "+valueToGoStringDescriptor(this.Package, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Dependency != nil {
|
|
||||||
s = append(s, "Dependency: "+fmt.Sprintf("%#v", this.Dependency)+",\n")
|
|
||||||
}
|
|
||||||
if this.PublicDependency != nil {
|
|
||||||
s = append(s, "PublicDependency: "+fmt.Sprintf("%#v", this.PublicDependency)+",\n")
|
|
||||||
}
|
|
||||||
if this.WeakDependency != nil {
|
|
||||||
s = append(s, "WeakDependency: "+fmt.Sprintf("%#v", this.WeakDependency)+",\n")
|
|
||||||
}
|
|
||||||
if this.MessageType != nil {
|
|
||||||
s = append(s, "MessageType: "+fmt.Sprintf("%#v", this.MessageType)+",\n")
|
|
||||||
}
|
|
||||||
if this.EnumType != nil {
|
|
||||||
s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n")
|
|
||||||
}
|
|
||||||
if this.Service != nil {
|
|
||||||
s = append(s, "Service: "+fmt.Sprintf("%#v", this.Service)+",\n")
|
|
||||||
}
|
|
||||||
if this.Extension != nil {
|
|
||||||
s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.SourceCodeInfo != nil {
|
|
||||||
s = append(s, "SourceCodeInfo: "+fmt.Sprintf("%#v", this.SourceCodeInfo)+",\n")
|
|
||||||
}
|
|
||||||
if this.Syntax != nil {
|
|
||||||
s = append(s, "Syntax: "+valueToGoStringDescriptor(this.Syntax, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *DescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 14)
|
|
||||||
s = append(s, "&descriptor.DescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Field != nil {
|
|
||||||
s = append(s, "Field: "+fmt.Sprintf("%#v", this.Field)+",\n")
|
|
||||||
}
|
|
||||||
if this.Extension != nil {
|
|
||||||
s = append(s, "Extension: "+fmt.Sprintf("%#v", this.Extension)+",\n")
|
|
||||||
}
|
|
||||||
if this.NestedType != nil {
|
|
||||||
s = append(s, "NestedType: "+fmt.Sprintf("%#v", this.NestedType)+",\n")
|
|
||||||
}
|
|
||||||
if this.EnumType != nil {
|
|
||||||
s = append(s, "EnumType: "+fmt.Sprintf("%#v", this.EnumType)+",\n")
|
|
||||||
}
|
|
||||||
if this.ExtensionRange != nil {
|
|
||||||
s = append(s, "ExtensionRange: "+fmt.Sprintf("%#v", this.ExtensionRange)+",\n")
|
|
||||||
}
|
|
||||||
if this.OneofDecl != nil {
|
|
||||||
s = append(s, "OneofDecl: "+fmt.Sprintf("%#v", this.OneofDecl)+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.ReservedRange != nil {
|
|
||||||
s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n")
|
|
||||||
}
|
|
||||||
if this.ReservedName != nil {
|
|
||||||
s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *DescriptorProto_ExtensionRange) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&descriptor.DescriptorProto_ExtensionRange{")
|
|
||||||
if this.Start != nil {
|
|
||||||
s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.End != nil {
|
|
||||||
s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *DescriptorProto_ReservedRange) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.DescriptorProto_ReservedRange{")
|
|
||||||
if this.Start != nil {
|
|
||||||
s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.End != nil {
|
|
||||||
s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *ExtensionRangeOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 5)
|
|
||||||
s = append(s, "&descriptor.ExtensionRangeOptions{")
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *FieldDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 14)
|
|
||||||
s = append(s, "&descriptor.FieldDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Number != nil {
|
|
||||||
s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.Label != nil {
|
|
||||||
s = append(s, "Label: "+valueToGoStringDescriptor(this.Label, "FieldDescriptorProto_Label")+",\n")
|
|
||||||
}
|
|
||||||
if this.Type != nil {
|
|
||||||
s = append(s, "Type: "+valueToGoStringDescriptor(this.Type, "FieldDescriptorProto_Type")+",\n")
|
|
||||||
}
|
|
||||||
if this.TypeName != nil {
|
|
||||||
s = append(s, "TypeName: "+valueToGoStringDescriptor(this.TypeName, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Extendee != nil {
|
|
||||||
s = append(s, "Extendee: "+valueToGoStringDescriptor(this.Extendee, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.DefaultValue != nil {
|
|
||||||
s = append(s, "DefaultValue: "+valueToGoStringDescriptor(this.DefaultValue, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.OneofIndex != nil {
|
|
||||||
s = append(s, "OneofIndex: "+valueToGoStringDescriptor(this.OneofIndex, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.JsonName != nil {
|
|
||||||
s = append(s, "JsonName: "+valueToGoStringDescriptor(this.JsonName, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *OneofDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.OneofDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *EnumDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 9)
|
|
||||||
s = append(s, "&descriptor.EnumDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Value != nil {
|
|
||||||
s = append(s, "Value: "+fmt.Sprintf("%#v", this.Value)+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.ReservedRange != nil {
|
|
||||||
s = append(s, "ReservedRange: "+fmt.Sprintf("%#v", this.ReservedRange)+",\n")
|
|
||||||
}
|
|
||||||
if this.ReservedName != nil {
|
|
||||||
s = append(s, "ReservedName: "+fmt.Sprintf("%#v", this.ReservedName)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *EnumDescriptorProto_EnumReservedRange) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.EnumDescriptorProto_EnumReservedRange{")
|
|
||||||
if this.Start != nil {
|
|
||||||
s = append(s, "Start: "+valueToGoStringDescriptor(this.Start, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.End != nil {
|
|
||||||
s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *EnumValueDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&descriptor.EnumValueDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Number != nil {
|
|
||||||
s = append(s, "Number: "+valueToGoStringDescriptor(this.Number, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *ServiceDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&descriptor.ServiceDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Method != nil {
|
|
||||||
s = append(s, "Method: "+fmt.Sprintf("%#v", this.Method)+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *MethodDescriptorProto) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 10)
|
|
||||||
s = append(s, "&descriptor.MethodDescriptorProto{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+valueToGoStringDescriptor(this.Name, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.InputType != nil {
|
|
||||||
s = append(s, "InputType: "+valueToGoStringDescriptor(this.InputType, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.OutputType != nil {
|
|
||||||
s = append(s, "OutputType: "+valueToGoStringDescriptor(this.OutputType, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Options != nil {
|
|
||||||
s = append(s, "Options: "+fmt.Sprintf("%#v", this.Options)+",\n")
|
|
||||||
}
|
|
||||||
if this.ClientStreaming != nil {
|
|
||||||
s = append(s, "ClientStreaming: "+valueToGoStringDescriptor(this.ClientStreaming, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.ServerStreaming != nil {
|
|
||||||
s = append(s, "ServerStreaming: "+valueToGoStringDescriptor(this.ServerStreaming, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *FileOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 25)
|
|
||||||
s = append(s, "&descriptor.FileOptions{")
|
|
||||||
if this.JavaPackage != nil {
|
|
||||||
s = append(s, "JavaPackage: "+valueToGoStringDescriptor(this.JavaPackage, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.JavaOuterClassname != nil {
|
|
||||||
s = append(s, "JavaOuterClassname: "+valueToGoStringDescriptor(this.JavaOuterClassname, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.JavaMultipleFiles != nil {
|
|
||||||
s = append(s, "JavaMultipleFiles: "+valueToGoStringDescriptor(this.JavaMultipleFiles, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.JavaGenerateEqualsAndHash != nil {
|
|
||||||
s = append(s, "JavaGenerateEqualsAndHash: "+valueToGoStringDescriptor(this.JavaGenerateEqualsAndHash, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.JavaStringCheckUtf8 != nil {
|
|
||||||
s = append(s, "JavaStringCheckUtf8: "+valueToGoStringDescriptor(this.JavaStringCheckUtf8, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.OptimizeFor != nil {
|
|
||||||
s = append(s, "OptimizeFor: "+valueToGoStringDescriptor(this.OptimizeFor, "FileOptions_OptimizeMode")+",\n")
|
|
||||||
}
|
|
||||||
if this.GoPackage != nil {
|
|
||||||
s = append(s, "GoPackage: "+valueToGoStringDescriptor(this.GoPackage, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.CcGenericServices != nil {
|
|
||||||
s = append(s, "CcGenericServices: "+valueToGoStringDescriptor(this.CcGenericServices, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.JavaGenericServices != nil {
|
|
||||||
s = append(s, "JavaGenericServices: "+valueToGoStringDescriptor(this.JavaGenericServices, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.PyGenericServices != nil {
|
|
||||||
s = append(s, "PyGenericServices: "+valueToGoStringDescriptor(this.PyGenericServices, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.PhpGenericServices != nil {
|
|
||||||
s = append(s, "PhpGenericServices: "+valueToGoStringDescriptor(this.PhpGenericServices, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.CcEnableArenas != nil {
|
|
||||||
s = append(s, "CcEnableArenas: "+valueToGoStringDescriptor(this.CcEnableArenas, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.ObjcClassPrefix != nil {
|
|
||||||
s = append(s, "ObjcClassPrefix: "+valueToGoStringDescriptor(this.ObjcClassPrefix, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.CsharpNamespace != nil {
|
|
||||||
s = append(s, "CsharpNamespace: "+valueToGoStringDescriptor(this.CsharpNamespace, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.SwiftPrefix != nil {
|
|
||||||
s = append(s, "SwiftPrefix: "+valueToGoStringDescriptor(this.SwiftPrefix, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.PhpClassPrefix != nil {
|
|
||||||
s = append(s, "PhpClassPrefix: "+valueToGoStringDescriptor(this.PhpClassPrefix, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.PhpNamespace != nil {
|
|
||||||
s = append(s, "PhpNamespace: "+valueToGoStringDescriptor(this.PhpNamespace, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.PhpMetadataNamespace != nil {
|
|
||||||
s = append(s, "PhpMetadataNamespace: "+valueToGoStringDescriptor(this.PhpMetadataNamespace, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.RubyPackage != nil {
|
|
||||||
s = append(s, "RubyPackage: "+valueToGoStringDescriptor(this.RubyPackage, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *MessageOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 9)
|
|
||||||
s = append(s, "&descriptor.MessageOptions{")
|
|
||||||
if this.MessageSetWireFormat != nil {
|
|
||||||
s = append(s, "MessageSetWireFormat: "+valueToGoStringDescriptor(this.MessageSetWireFormat, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.NoStandardDescriptorAccessor != nil {
|
|
||||||
s = append(s, "NoStandardDescriptorAccessor: "+valueToGoStringDescriptor(this.NoStandardDescriptorAccessor, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.MapEntry != nil {
|
|
||||||
s = append(s, "MapEntry: "+valueToGoStringDescriptor(this.MapEntry, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *FieldOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 11)
|
|
||||||
s = append(s, "&descriptor.FieldOptions{")
|
|
||||||
if this.Ctype != nil {
|
|
||||||
s = append(s, "Ctype: "+valueToGoStringDescriptor(this.Ctype, "FieldOptions_CType")+",\n")
|
|
||||||
}
|
|
||||||
if this.Packed != nil {
|
|
||||||
s = append(s, "Packed: "+valueToGoStringDescriptor(this.Packed, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Jstype != nil {
|
|
||||||
s = append(s, "Jstype: "+valueToGoStringDescriptor(this.Jstype, "FieldOptions_JSType")+",\n")
|
|
||||||
}
|
|
||||||
if this.Lazy != nil {
|
|
||||||
s = append(s, "Lazy: "+valueToGoStringDescriptor(this.Lazy, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Weak != nil {
|
|
||||||
s = append(s, "Weak: "+valueToGoStringDescriptor(this.Weak, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *OneofOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 5)
|
|
||||||
s = append(s, "&descriptor.OneofOptions{")
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *EnumOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&descriptor.EnumOptions{")
|
|
||||||
if this.AllowAlias != nil {
|
|
||||||
s = append(s, "AllowAlias: "+valueToGoStringDescriptor(this.AllowAlias, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *EnumValueOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.EnumValueOptions{")
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *ServiceOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.ServiceOptions{")
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *MethodOptions) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 7)
|
|
||||||
s = append(s, "&descriptor.MethodOptions{")
|
|
||||||
if this.Deprecated != nil {
|
|
||||||
s = append(s, "Deprecated: "+valueToGoStringDescriptor(this.Deprecated, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.IdempotencyLevel != nil {
|
|
||||||
s = append(s, "IdempotencyLevel: "+valueToGoStringDescriptor(this.IdempotencyLevel, "MethodOptions_IdempotencyLevel")+",\n")
|
|
||||||
}
|
|
||||||
if this.UninterpretedOption != nil {
|
|
||||||
s = append(s, "UninterpretedOption: "+fmt.Sprintf("%#v", this.UninterpretedOption)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "XXX_InternalExtensions: "+extensionToGoStringDescriptor(this)+",\n")
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *UninterpretedOption) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 11)
|
|
||||||
s = append(s, "&descriptor.UninterpretedOption{")
|
|
||||||
if this.Name != nil {
|
|
||||||
s = append(s, "Name: "+fmt.Sprintf("%#v", this.Name)+",\n")
|
|
||||||
}
|
|
||||||
if this.IdentifierValue != nil {
|
|
||||||
s = append(s, "IdentifierValue: "+valueToGoStringDescriptor(this.IdentifierValue, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.PositiveIntValue != nil {
|
|
||||||
s = append(s, "PositiveIntValue: "+valueToGoStringDescriptor(this.PositiveIntValue, "uint64")+",\n")
|
|
||||||
}
|
|
||||||
if this.NegativeIntValue != nil {
|
|
||||||
s = append(s, "NegativeIntValue: "+valueToGoStringDescriptor(this.NegativeIntValue, "int64")+",\n")
|
|
||||||
}
|
|
||||||
if this.DoubleValue != nil {
|
|
||||||
s = append(s, "DoubleValue: "+valueToGoStringDescriptor(this.DoubleValue, "float64")+",\n")
|
|
||||||
}
|
|
||||||
if this.StringValue != nil {
|
|
||||||
s = append(s, "StringValue: "+valueToGoStringDescriptor(this.StringValue, "byte")+",\n")
|
|
||||||
}
|
|
||||||
if this.AggregateValue != nil {
|
|
||||||
s = append(s, "AggregateValue: "+valueToGoStringDescriptor(this.AggregateValue, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *UninterpretedOption_NamePart) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 6)
|
|
||||||
s = append(s, "&descriptor.UninterpretedOption_NamePart{")
|
|
||||||
if this.NamePart != nil {
|
|
||||||
s = append(s, "NamePart: "+valueToGoStringDescriptor(this.NamePart, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.IsExtension != nil {
|
|
||||||
s = append(s, "IsExtension: "+valueToGoStringDescriptor(this.IsExtension, "bool")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *SourceCodeInfo) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 5)
|
|
||||||
s = append(s, "&descriptor.SourceCodeInfo{")
|
|
||||||
if this.Location != nil {
|
|
||||||
s = append(s, "Location: "+fmt.Sprintf("%#v", this.Location)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *SourceCodeInfo_Location) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 9)
|
|
||||||
s = append(s, "&descriptor.SourceCodeInfo_Location{")
|
|
||||||
if this.Path != nil {
|
|
||||||
s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n")
|
|
||||||
}
|
|
||||||
if this.Span != nil {
|
|
||||||
s = append(s, "Span: "+fmt.Sprintf("%#v", this.Span)+",\n")
|
|
||||||
}
|
|
||||||
if this.LeadingComments != nil {
|
|
||||||
s = append(s, "LeadingComments: "+valueToGoStringDescriptor(this.LeadingComments, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.TrailingComments != nil {
|
|
||||||
s = append(s, "TrailingComments: "+valueToGoStringDescriptor(this.TrailingComments, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.LeadingDetachedComments != nil {
|
|
||||||
s = append(s, "LeadingDetachedComments: "+fmt.Sprintf("%#v", this.LeadingDetachedComments)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *GeneratedCodeInfo) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 5)
|
|
||||||
s = append(s, "&descriptor.GeneratedCodeInfo{")
|
|
||||||
if this.Annotation != nil {
|
|
||||||
s = append(s, "Annotation: "+fmt.Sprintf("%#v", this.Annotation)+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func (this *GeneratedCodeInfo_Annotation) GoString() string {
|
|
||||||
if this == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := make([]string, 0, 8)
|
|
||||||
s = append(s, "&descriptor.GeneratedCodeInfo_Annotation{")
|
|
||||||
if this.Path != nil {
|
|
||||||
s = append(s, "Path: "+fmt.Sprintf("%#v", this.Path)+",\n")
|
|
||||||
}
|
|
||||||
if this.SourceFile != nil {
|
|
||||||
s = append(s, "SourceFile: "+valueToGoStringDescriptor(this.SourceFile, "string")+",\n")
|
|
||||||
}
|
|
||||||
if this.Begin != nil {
|
|
||||||
s = append(s, "Begin: "+valueToGoStringDescriptor(this.Begin, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.End != nil {
|
|
||||||
s = append(s, "End: "+valueToGoStringDescriptor(this.End, "int32")+",\n")
|
|
||||||
}
|
|
||||||
if this.XXX_unrecognized != nil {
|
|
||||||
s = append(s, "XXX_unrecognized:"+fmt.Sprintf("%#v", this.XXX_unrecognized)+",\n")
|
|
||||||
}
|
|
||||||
s = append(s, "}")
|
|
||||||
return strings.Join(s, "")
|
|
||||||
}
|
|
||||||
func valueToGoStringDescriptor(v interface{}, typ string) string {
|
|
||||||
rv := reflect.ValueOf(v)
|
|
||||||
if rv.IsNil() {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
pv := reflect.Indirect(rv).Interface()
|
|
||||||
return fmt.Sprintf("func(v %v) *%v { return &v } ( %#v )", typ, typ, pv)
|
|
||||||
}
|
|
||||||
func extensionToGoStringDescriptor(m github_com_gogo_protobuf_proto.Message) string {
|
|
||||||
e := github_com_gogo_protobuf_proto.GetUnsafeExtensionsMap(m)
|
|
||||||
if e == nil {
|
|
||||||
return "nil"
|
|
||||||
}
|
|
||||||
s := "proto.NewUnsafeXXX_InternalExtensions(map[int32]proto.Extension{"
|
|
||||||
keys := make([]int, 0, len(e))
|
|
||||||
for k := range e {
|
|
||||||
keys = append(keys, int(k))
|
|
||||||
}
|
|
||||||
sort.Ints(keys)
|
|
||||||
ss := []string{}
|
|
||||||
for _, k := range keys {
|
|
||||||
ss = append(ss, strconv.Itoa(k)+": "+e[int32(k)].GoString())
|
|
||||||
}
|
|
||||||
s += strings.Join(ss, ",") + "})"
|
|
||||||
return s
|
|
||||||
}
|
|
390
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go
generated
vendored
390
vendor/github.com/gogo/protobuf/protoc-gen-gogo/descriptor/helper.go
generated
vendored
@ -1,390 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package descriptor
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (msg *DescriptorProto) GetMapFields() (*FieldDescriptorProto, *FieldDescriptorProto) {
|
|
||||||
if !msg.GetOptions().GetMapEntry() {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
return msg.GetField()[0], msg.GetField()[1]
|
|
||||||
}
|
|
||||||
|
|
||||||
func dotToUnderscore(r rune) rune {
|
|
||||||
if r == '.' {
|
|
||||||
return '_'
|
|
||||||
}
|
|
||||||
return r
|
|
||||||
}
|
|
||||||
|
|
||||||
func (field *FieldDescriptorProto) WireType() (wire int) {
|
|
||||||
switch *field.Type {
|
|
||||||
case FieldDescriptorProto_TYPE_DOUBLE:
|
|
||||||
return 1
|
|
||||||
case FieldDescriptorProto_TYPE_FLOAT:
|
|
||||||
return 5
|
|
||||||
case FieldDescriptorProto_TYPE_INT64:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_UINT64:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_INT32:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_UINT32:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_FIXED64:
|
|
||||||
return 1
|
|
||||||
case FieldDescriptorProto_TYPE_FIXED32:
|
|
||||||
return 5
|
|
||||||
case FieldDescriptorProto_TYPE_BOOL:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_STRING:
|
|
||||||
return 2
|
|
||||||
case FieldDescriptorProto_TYPE_GROUP:
|
|
||||||
return 2
|
|
||||||
case FieldDescriptorProto_TYPE_MESSAGE:
|
|
||||||
return 2
|
|
||||||
case FieldDescriptorProto_TYPE_BYTES:
|
|
||||||
return 2
|
|
||||||
case FieldDescriptorProto_TYPE_ENUM:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_SFIXED32:
|
|
||||||
return 5
|
|
||||||
case FieldDescriptorProto_TYPE_SFIXED64:
|
|
||||||
return 1
|
|
||||||
case FieldDescriptorProto_TYPE_SINT32:
|
|
||||||
return 0
|
|
||||||
case FieldDescriptorProto_TYPE_SINT64:
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
panic("unreachable")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (field *FieldDescriptorProto) GetKeyUint64() (x uint64) {
|
|
||||||
packed := field.IsPacked()
|
|
||||||
wireType := field.WireType()
|
|
||||||
fieldNumber := field.GetNumber()
|
|
||||||
if packed {
|
|
||||||
wireType = 2
|
|
||||||
}
|
|
||||||
x = uint64(uint32(fieldNumber)<<3 | uint32(wireType))
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
|
|
||||||
func (field *FieldDescriptorProto) GetKey3Uint64() (x uint64) {
|
|
||||||
packed := field.IsPacked3()
|
|
||||||
wireType := field.WireType()
|
|
||||||
fieldNumber := field.GetNumber()
|
|
||||||
if packed {
|
|
||||||
wireType = 2
|
|
||||||
}
|
|
||||||
x = uint64(uint32(fieldNumber)<<3 | uint32(wireType))
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
|
|
||||||
func (field *FieldDescriptorProto) GetKey() []byte {
|
|
||||||
x := field.GetKeyUint64()
|
|
||||||
i := 0
|
|
||||||
keybuf := make([]byte, 0)
|
|
||||||
for i = 0; x > 127; i++ {
|
|
||||||
keybuf = append(keybuf, 0x80|uint8(x&0x7F))
|
|
||||||
x >>= 7
|
|
||||||
}
|
|
||||||
keybuf = append(keybuf, uint8(x))
|
|
||||||
return keybuf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (field *FieldDescriptorProto) GetKey3() []byte {
|
|
||||||
x := field.GetKey3Uint64()
|
|
||||||
i := 0
|
|
||||||
keybuf := make([]byte, 0)
|
|
||||||
for i = 0; x > 127; i++ {
|
|
||||||
keybuf = append(keybuf, 0x80|uint8(x&0x7F))
|
|
||||||
x >>= 7
|
|
||||||
}
|
|
||||||
keybuf = append(keybuf, uint8(x))
|
|
||||||
return keybuf
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) GetField(packageName, messageName, fieldName string) *FieldDescriptorProto {
|
|
||||||
msg := desc.GetMessage(packageName, messageName)
|
|
||||||
if msg == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
for _, field := range msg.GetField() {
|
|
||||||
if field.GetName() == fieldName {
|
|
||||||
return field
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (file *FileDescriptorProto) GetMessage(typeName string) *DescriptorProto {
|
|
||||||
for _, msg := range file.GetMessageType() {
|
|
||||||
if msg.GetName() == typeName {
|
|
||||||
return msg
|
|
||||||
}
|
|
||||||
nes := file.GetNestedMessage(msg, strings.TrimPrefix(typeName, msg.GetName()+"."))
|
|
||||||
if nes != nil {
|
|
||||||
return nes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (file *FileDescriptorProto) GetNestedMessage(msg *DescriptorProto, typeName string) *DescriptorProto {
|
|
||||||
for _, nes := range msg.GetNestedType() {
|
|
||||||
if nes.GetName() == typeName {
|
|
||||||
return nes
|
|
||||||
}
|
|
||||||
res := file.GetNestedMessage(nes, strings.TrimPrefix(typeName, nes.GetName()+"."))
|
|
||||||
if res != nil {
|
|
||||||
return res
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) GetMessage(packageName string, typeName string) *DescriptorProto {
|
|
||||||
for _, file := range desc.GetFile() {
|
|
||||||
if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, msg := range file.GetMessageType() {
|
|
||||||
if msg.GetName() == typeName {
|
|
||||||
return msg
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, msg := range file.GetMessageType() {
|
|
||||||
for _, nes := range msg.GetNestedType() {
|
|
||||||
if nes.GetName() == typeName {
|
|
||||||
return nes
|
|
||||||
}
|
|
||||||
if msg.GetName()+"."+nes.GetName() == typeName {
|
|
||||||
return nes
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) IsProto3(packageName string, typeName string) bool {
|
|
||||||
for _, file := range desc.GetFile() {
|
|
||||||
if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, msg := range file.GetMessageType() {
|
|
||||||
if msg.GetName() == typeName {
|
|
||||||
return file.GetSyntax() == "proto3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, msg := range file.GetMessageType() {
|
|
||||||
for _, nes := range msg.GetNestedType() {
|
|
||||||
if nes.GetName() == typeName {
|
|
||||||
return file.GetSyntax() == "proto3"
|
|
||||||
}
|
|
||||||
if msg.GetName()+"."+nes.GetName() == typeName {
|
|
||||||
return file.GetSyntax() == "proto3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msg *DescriptorProto) IsExtendable() bool {
|
|
||||||
return len(msg.GetExtensionRange()) > 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) FindExtension(packageName string, typeName string, fieldName string) (extPackageName string, field *FieldDescriptorProto) {
|
|
||||||
parent := desc.GetMessage(packageName, typeName)
|
|
||||||
if parent == nil {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
if !parent.IsExtendable() {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
extendee := "." + packageName + "." + typeName
|
|
||||||
for _, file := range desc.GetFile() {
|
|
||||||
for _, ext := range file.GetExtension() {
|
|
||||||
if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) {
|
|
||||||
if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ext.GetExtendee() != extendee {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ext.GetName() == fieldName {
|
|
||||||
return file.GetPackage(), ext
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) FindExtensionByFieldNumber(packageName string, typeName string, fieldNum int32) (extPackageName string, field *FieldDescriptorProto) {
|
|
||||||
parent := desc.GetMessage(packageName, typeName)
|
|
||||||
if parent == nil {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
if !parent.IsExtendable() {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
extendee := "." + packageName + "." + typeName
|
|
||||||
for _, file := range desc.GetFile() {
|
|
||||||
for _, ext := range file.GetExtension() {
|
|
||||||
if strings.Map(dotToUnderscore, file.GetPackage()) == strings.Map(dotToUnderscore, packageName) {
|
|
||||||
if !(ext.GetExtendee() == typeName || ext.GetExtendee() == extendee) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ext.GetExtendee() != extendee {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ext.GetNumber() == fieldNum {
|
|
||||||
return file.GetPackage(), ext
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) FindMessage(packageName string, typeName string, fieldName string) (msgPackageName string, msgName string) {
|
|
||||||
parent := desc.GetMessage(packageName, typeName)
|
|
||||||
if parent == nil {
|
|
||||||
return "", ""
|
|
||||||
}
|
|
||||||
field := parent.GetFieldDescriptor(fieldName)
|
|
||||||
if field == nil {
|
|
||||||
var extPackageName string
|
|
||||||
extPackageName, field = desc.FindExtension(packageName, typeName, fieldName)
|
|
||||||
if field == nil {
|
|
||||||
return "", ""
|
|
||||||
}
|
|
||||||
packageName = extPackageName
|
|
||||||
}
|
|
||||||
typeNames := strings.Split(field.GetTypeName(), ".")
|
|
||||||
if len(typeNames) == 1 {
|
|
||||||
msg := desc.GetMessage(packageName, typeName)
|
|
||||||
if msg == nil {
|
|
||||||
return "", ""
|
|
||||||
}
|
|
||||||
return packageName, msg.GetName()
|
|
||||||
}
|
|
||||||
if len(typeNames) > 2 {
|
|
||||||
for i := 1; i < len(typeNames)-1; i++ {
|
|
||||||
packageName = strings.Join(typeNames[1:len(typeNames)-i], ".")
|
|
||||||
typeName = strings.Join(typeNames[len(typeNames)-i:], ".")
|
|
||||||
msg := desc.GetMessage(packageName, typeName)
|
|
||||||
if msg != nil {
|
|
||||||
typeNames := strings.Split(msg.GetName(), ".")
|
|
||||||
if len(typeNames) == 1 {
|
|
||||||
return packageName, msg.GetName()
|
|
||||||
}
|
|
||||||
return strings.Join(typeNames[1:len(typeNames)-1], "."), typeNames[len(typeNames)-1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (msg *DescriptorProto) GetFieldDescriptor(fieldName string) *FieldDescriptorProto {
|
|
||||||
for _, field := range msg.GetField() {
|
|
||||||
if field.GetName() == fieldName {
|
|
||||||
return field
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (desc *FileDescriptorSet) GetEnum(packageName string, typeName string) *EnumDescriptorProto {
|
|
||||||
for _, file := range desc.GetFile() {
|
|
||||||
if strings.Map(dotToUnderscore, file.GetPackage()) != strings.Map(dotToUnderscore, packageName) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for _, enum := range file.GetEnumType() {
|
|
||||||
if enum.GetName() == typeName {
|
|
||||||
return enum
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsEnum() bool {
|
|
||||||
return *f.Type == FieldDescriptorProto_TYPE_ENUM
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsMessage() bool {
|
|
||||||
return *f.Type == FieldDescriptorProto_TYPE_MESSAGE
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsBytes() bool {
|
|
||||||
return *f.Type == FieldDescriptorProto_TYPE_BYTES
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsRepeated() bool {
|
|
||||||
return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REPEATED
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsString() bool {
|
|
||||||
return *f.Type == FieldDescriptorProto_TYPE_STRING
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsBool() bool {
|
|
||||||
return *f.Type == FieldDescriptorProto_TYPE_BOOL
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsRequired() bool {
|
|
||||||
return f.Label != nil && *f.Label == FieldDescriptorProto_LABEL_REQUIRED
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsPacked() bool {
|
|
||||||
return f.Options != nil && f.GetOptions().GetPacked()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *FieldDescriptorProto) IsPacked3() bool {
|
|
||||||
if f.IsRepeated() && f.IsScalar() {
|
|
||||||
if f.Options == nil || f.GetOptions().Packed == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return f.Options != nil && f.GetOptions().GetPacked()
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *DescriptorProto) HasExtension() bool {
|
|
||||||
return len(m.ExtensionRange) > 0
|
|
||||||
}
|
|
51
vendor/github.com/gogo/protobuf/protoc-gen-gogo/doc.go
generated
vendored
51
vendor/github.com/gogo/protobuf/protoc-gen-gogo/doc.go
generated
vendored
@ -1,51 +0,0 @@
|
|||||||
// Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
//
|
|
||||||
// Copyright 2010 The Go Authors. All rights reserved.
|
|
||||||
// https://github.com/golang/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
A plugin for the Google protocol buffer compiler to generate Go code.
|
|
||||||
Run it by building this program and putting it in your path with the name
|
|
||||||
protoc-gen-gogo
|
|
||||||
That word 'gogo' at the end becomes part of the option string set for the
|
|
||||||
protocol compiler, so once the protocol compiler (protoc) is installed
|
|
||||||
you can run
|
|
||||||
protoc --gogo_out=output_directory input_directory/file.proto
|
|
||||||
to generate Go bindings for the protocol defined by file.proto.
|
|
||||||
With that input, the output will be written to
|
|
||||||
output_directory/go_package/file.pb.go
|
|
||||||
|
|
||||||
The generated code is documented in the package comment for
|
|
||||||
the library.
|
|
||||||
|
|
||||||
See the README and documentation for protocol buffers to learn more:
|
|
||||||
https://developers.google.com/protocol-buffers/
|
|
||||||
|
|
||||||
*/
|
|
||||||
package documentation
|
|
3444
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go
generated
vendored
3444
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/generator.go
generated
vendored
File diff suppressed because it is too large
Load Diff
461
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go
generated
vendored
461
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/helper.go
generated
vendored
@ -1,461 +0,0 @@
|
|||||||
// Protocol Buffers for Go with Gadgets
|
|
||||||
//
|
|
||||||
// Copyright (c) 2013, The GoGo Authors. All rights reserved.
|
|
||||||
// http://github.com/gogo/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
package generator
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"go/parser"
|
|
||||||
"go/printer"
|
|
||||||
"go/token"
|
|
||||||
"path"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/gogo/protobuf/gogoproto"
|
|
||||||
"github.com/gogo/protobuf/proto"
|
|
||||||
descriptor "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
plugin "github.com/gogo/protobuf/protoc-gen-gogo/plugin"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (d *FileDescriptor) Messages() []*Descriptor {
|
|
||||||
return d.desc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *FileDescriptor) Enums() []*EnumDescriptor {
|
|
||||||
return d.enum
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Descriptor) IsGroup() bool {
|
|
||||||
return d.group
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) IsGroup(field *descriptor.FieldDescriptorProto) bool {
|
|
||||||
if d, ok := g.typeNameToObject[field.GetTypeName()].(*Descriptor); ok {
|
|
||||||
return d.IsGroup()
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) TypeNameByObject(typeName string) Object {
|
|
||||||
o, ok := g.typeNameToObject[typeName]
|
|
||||||
if !ok {
|
|
||||||
g.Fail("can't find object with type", typeName)
|
|
||||||
}
|
|
||||||
return o
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) OneOfTypeName(message *Descriptor, field *descriptor.FieldDescriptorProto) string {
|
|
||||||
typeName := message.TypeName()
|
|
||||||
ccTypeName := CamelCaseSlice(typeName)
|
|
||||||
fieldName := g.GetOneOfFieldName(message, field)
|
|
||||||
tname := ccTypeName + "_" + fieldName
|
|
||||||
// It is possible for this to collide with a message or enum
|
|
||||||
// nested in this message. Check for collisions.
|
|
||||||
ok := true
|
|
||||||
for _, desc := range message.nested {
|
|
||||||
if strings.Join(desc.TypeName(), "_") == tname {
|
|
||||||
ok = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for _, enum := range message.enums {
|
|
||||||
if strings.Join(enum.TypeName(), "_") == tname {
|
|
||||||
ok = false
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !ok {
|
|
||||||
tname += "_"
|
|
||||||
}
|
|
||||||
return tname
|
|
||||||
}
|
|
||||||
|
|
||||||
type PluginImports interface {
|
|
||||||
NewImport(pkg string) Single
|
|
||||||
GenerateImports(file *FileDescriptor)
|
|
||||||
}
|
|
||||||
|
|
||||||
type pluginImports struct {
|
|
||||||
generator *Generator
|
|
||||||
singles []Single
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewPluginImports(generator *Generator) *pluginImports {
|
|
||||||
return &pluginImports{generator, make([]Single, 0)}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *pluginImports) NewImport(pkg string) Single {
|
|
||||||
imp := newImportedPackage(this.generator.ImportPrefix, pkg)
|
|
||||||
this.singles = append(this.singles, imp)
|
|
||||||
return imp
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *pluginImports) GenerateImports(file *FileDescriptor) {
|
|
||||||
for _, s := range this.singles {
|
|
||||||
if s.IsUsed() {
|
|
||||||
this.generator.PrintImport(GoPackageName(s.Name()), GoImportPath(s.Location()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type Single interface {
|
|
||||||
Use() string
|
|
||||||
IsUsed() bool
|
|
||||||
Name() string
|
|
||||||
Location() string
|
|
||||||
}
|
|
||||||
|
|
||||||
type importedPackage struct {
|
|
||||||
used bool
|
|
||||||
pkg string
|
|
||||||
name string
|
|
||||||
importPrefix string
|
|
||||||
}
|
|
||||||
|
|
||||||
func newImportedPackage(importPrefix string, pkg string) *importedPackage {
|
|
||||||
return &importedPackage{
|
|
||||||
pkg: pkg,
|
|
||||||
importPrefix: importPrefix,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *importedPackage) Use() string {
|
|
||||||
if !this.used {
|
|
||||||
this.name = string(cleanPackageName(this.pkg))
|
|
||||||
this.used = true
|
|
||||||
}
|
|
||||||
return this.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *importedPackage) IsUsed() bool {
|
|
||||||
return this.used
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *importedPackage) Name() string {
|
|
||||||
return this.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *importedPackage) Location() string {
|
|
||||||
return this.importPrefix + this.pkg
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) GetFieldName(message *Descriptor, field *descriptor.FieldDescriptorProto) string {
|
|
||||||
goTyp, _ := g.GoType(message, field)
|
|
||||||
fieldname := CamelCase(*field.Name)
|
|
||||||
if gogoproto.IsCustomName(field) {
|
|
||||||
fieldname = gogoproto.GetCustomName(field)
|
|
||||||
}
|
|
||||||
if gogoproto.IsEmbed(field) {
|
|
||||||
fieldname = EmbedFieldName(goTyp)
|
|
||||||
}
|
|
||||||
if field.OneofIndex != nil {
|
|
||||||
fieldname = message.OneofDecl[int(*field.OneofIndex)].GetName()
|
|
||||||
fieldname = CamelCase(fieldname)
|
|
||||||
}
|
|
||||||
for _, f := range methodNames {
|
|
||||||
if f == fieldname {
|
|
||||||
return fieldname + "_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !gogoproto.IsProtoSizer(message.file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
if fieldname == "Size" {
|
|
||||||
return fieldname + "_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fieldname
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) GetOneOfFieldName(message *Descriptor, field *descriptor.FieldDescriptorProto) string {
|
|
||||||
goTyp, _ := g.GoType(message, field)
|
|
||||||
fieldname := CamelCase(*field.Name)
|
|
||||||
if gogoproto.IsCustomName(field) {
|
|
||||||
fieldname = gogoproto.GetCustomName(field)
|
|
||||||
}
|
|
||||||
if gogoproto.IsEmbed(field) {
|
|
||||||
fieldname = EmbedFieldName(goTyp)
|
|
||||||
}
|
|
||||||
for _, f := range methodNames {
|
|
||||||
if f == fieldname {
|
|
||||||
return fieldname + "_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !gogoproto.IsProtoSizer(message.file.FileDescriptorProto, message.DescriptorProto) {
|
|
||||||
if fieldname == "Size" {
|
|
||||||
return fieldname + "_"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fieldname
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) IsMap(field *descriptor.FieldDescriptorProto) bool {
|
|
||||||
if !field.IsMessage() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
byName := g.ObjectNamed(field.GetTypeName())
|
|
||||||
desc, ok := byName.(*Descriptor)
|
|
||||||
if byName == nil || !ok || !desc.GetOptions().GetMapEntry() {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) GetMapKeyField(field, keyField *descriptor.FieldDescriptorProto) *descriptor.FieldDescriptorProto {
|
|
||||||
if !gogoproto.IsCastKey(field) {
|
|
||||||
return keyField
|
|
||||||
}
|
|
||||||
keyField = proto.Clone(keyField).(*descriptor.FieldDescriptorProto)
|
|
||||||
if keyField.Options == nil {
|
|
||||||
keyField.Options = &descriptor.FieldOptions{}
|
|
||||||
}
|
|
||||||
keyType := gogoproto.GetCastKey(field)
|
|
||||||
if err := proto.SetExtension(keyField.Options, gogoproto.E_Casttype, &keyType); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
return keyField
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) GetMapValueField(field, valField *descriptor.FieldDescriptorProto) *descriptor.FieldDescriptorProto {
|
|
||||||
if gogoproto.IsCustomType(field) && gogoproto.IsCastValue(field) {
|
|
||||||
g.Fail("cannot have a customtype and casttype: ", field.String())
|
|
||||||
}
|
|
||||||
valField = proto.Clone(valField).(*descriptor.FieldDescriptorProto)
|
|
||||||
if valField.Options == nil {
|
|
||||||
valField.Options = &descriptor.FieldOptions{}
|
|
||||||
}
|
|
||||||
|
|
||||||
stdtime := gogoproto.IsStdTime(field)
|
|
||||||
if stdtime {
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Stdtime, &stdtime); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
stddur := gogoproto.IsStdDuration(field)
|
|
||||||
if stddur {
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Stdduration, &stddur); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
wktptr := gogoproto.IsWktPtr(field)
|
|
||||||
if wktptr {
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Wktpointer, &wktptr); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if valType := gogoproto.GetCastValue(field); len(valType) > 0 {
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Casttype, &valType); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if valType := gogoproto.GetCustomType(field); len(valType) > 0 {
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Customtype, &valType); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
nullable := gogoproto.IsNullable(field)
|
|
||||||
if err := proto.SetExtension(valField.Options, gogoproto.E_Nullable, &nullable); err != nil {
|
|
||||||
g.Fail(err.Error())
|
|
||||||
}
|
|
||||||
return valField
|
|
||||||
}
|
|
||||||
|
|
||||||
// GoMapValueTypes returns the map value Go type and the alias map value Go type (for casting), taking into
|
|
||||||
// account whether the map is nullable or the value is a message.
|
|
||||||
func GoMapValueTypes(mapField, valueField *descriptor.FieldDescriptorProto, goValueType, goValueAliasType string) (nullable bool, outGoType string, outGoAliasType string) {
|
|
||||||
nullable = gogoproto.IsNullable(mapField) && (valueField.IsMessage() || gogoproto.IsCustomType(mapField))
|
|
||||||
if nullable {
|
|
||||||
// ensure the non-aliased Go value type is a pointer for consistency
|
|
||||||
if strings.HasPrefix(goValueType, "*") {
|
|
||||||
outGoType = goValueType
|
|
||||||
} else {
|
|
||||||
outGoType = "*" + goValueType
|
|
||||||
}
|
|
||||||
outGoAliasType = goValueAliasType
|
|
||||||
} else {
|
|
||||||
outGoType = strings.Replace(goValueType, "*", "", 1)
|
|
||||||
outGoAliasType = strings.Replace(goValueAliasType, "*", "", 1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func GoTypeToName(goTyp string) string {
|
|
||||||
return strings.Replace(strings.Replace(goTyp, "*", "", -1), "[]", "", -1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func EmbedFieldName(goTyp string) string {
|
|
||||||
goTyp = GoTypeToName(goTyp)
|
|
||||||
goTyps := strings.Split(goTyp, ".")
|
|
||||||
if len(goTyps) == 1 {
|
|
||||||
return goTyp
|
|
||||||
}
|
|
||||||
if len(goTyps) == 2 {
|
|
||||||
return goTyps[1]
|
|
||||||
}
|
|
||||||
panic("unreachable")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) GeneratePlugin(p Plugin) {
|
|
||||||
plugins = []Plugin{p}
|
|
||||||
p.Init(g)
|
|
||||||
// Generate the output. The generator runs for every file, even the files
|
|
||||||
// that we don't generate output for, so that we can collate the full list
|
|
||||||
// of exported symbols to support public imports.
|
|
||||||
genFileMap := make(map[*FileDescriptor]bool, len(g.genFiles))
|
|
||||||
for _, file := range g.genFiles {
|
|
||||||
genFileMap[file] = true
|
|
||||||
}
|
|
||||||
for _, file := range g.allFiles {
|
|
||||||
g.Reset()
|
|
||||||
g.writeOutput = genFileMap[file]
|
|
||||||
g.generatePlugin(file, p)
|
|
||||||
if !g.writeOutput {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
g.Response.File = append(g.Response.File, &plugin.CodeGeneratorResponse_File{
|
|
||||||
Name: proto.String(file.goFileName(g.pathType)),
|
|
||||||
Content: proto.String(g.String()),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) SetFile(filename string) {
|
|
||||||
g.file = g.fileByName(filename)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) generatePlugin(file *FileDescriptor, p Plugin) {
|
|
||||||
g.writtenImports = make(map[string]bool)
|
|
||||||
g.usedPackages = make(map[GoImportPath]bool)
|
|
||||||
g.packageNames = make(map[GoImportPath]GoPackageName)
|
|
||||||
g.usedPackageNames = make(map[GoPackageName]bool)
|
|
||||||
g.addedImports = make(map[GoImportPath]bool)
|
|
||||||
g.file = file
|
|
||||||
|
|
||||||
// Run the plugins before the imports so we know which imports are necessary.
|
|
||||||
p.Generate(file)
|
|
||||||
|
|
||||||
// Generate header and imports last, though they appear first in the output.
|
|
||||||
rem := g.Buffer
|
|
||||||
g.Buffer = new(bytes.Buffer)
|
|
||||||
g.generateHeader()
|
|
||||||
// p.GenerateImports(g.file)
|
|
||||||
g.generateImports()
|
|
||||||
if !g.writeOutput {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
g.Write(rem.Bytes())
|
|
||||||
|
|
||||||
// Reformat generated code.
|
|
||||||
contents := string(g.Buffer.Bytes())
|
|
||||||
fset := token.NewFileSet()
|
|
||||||
ast, err := parser.ParseFile(fset, "", g, parser.ParseComments)
|
|
||||||
if err != nil {
|
|
||||||
g.Fail("bad Go source code was generated:", contents, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
g.Reset()
|
|
||||||
err = (&printer.Config{Mode: printer.TabIndent | printer.UseSpaces, Tabwidth: 8}).Fprint(g, fset, ast)
|
|
||||||
if err != nil {
|
|
||||||
g.Fail("generated Go source code could not be reformatted:", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetCustomType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) {
|
|
||||||
return getCustomType(field)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getCustomType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) {
|
|
||||||
if field.Options != nil {
|
|
||||||
var v interface{}
|
|
||||||
v, err = proto.GetExtension(field.Options, gogoproto.E_Customtype)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
ctype := *(v.(*string))
|
|
||||||
packageName, typ = splitCPackageType(ctype)
|
|
||||||
return packageName, typ, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
func splitCPackageType(ctype string) (packageName string, typ string) {
|
|
||||||
ss := strings.Split(ctype, ".")
|
|
||||||
if len(ss) == 1 {
|
|
||||||
return "", ctype
|
|
||||||
}
|
|
||||||
packageName = strings.Join(ss[0:len(ss)-1], ".")
|
|
||||||
typeName := ss[len(ss)-1]
|
|
||||||
importStr := strings.Map(badToUnderscore, packageName)
|
|
||||||
typ = importStr + "." + typeName
|
|
||||||
return packageName, typ
|
|
||||||
}
|
|
||||||
|
|
||||||
func getCastType(field *descriptor.FieldDescriptorProto) (packageName string, typ string, err error) {
|
|
||||||
if field.Options != nil {
|
|
||||||
var v interface{}
|
|
||||||
v, err = proto.GetExtension(field.Options, gogoproto.E_Casttype)
|
|
||||||
if err == nil && v.(*string) != nil {
|
|
||||||
ctype := *(v.(*string))
|
|
||||||
packageName, typ = splitCPackageType(ctype)
|
|
||||||
return packageName, typ, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "", "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
func FileName(file *FileDescriptor) string {
|
|
||||||
fname := path.Base(file.FileDescriptorProto.GetName())
|
|
||||||
fname = strings.Replace(fname, ".proto", "", -1)
|
|
||||||
fname = strings.Replace(fname, "-", "_", -1)
|
|
||||||
fname = strings.Replace(fname, ".", "_", -1)
|
|
||||||
return CamelCase(fname)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) AllFiles() *descriptor.FileDescriptorSet {
|
|
||||||
set := &descriptor.FileDescriptorSet{}
|
|
||||||
set.File = make([]*descriptor.FileDescriptorProto, len(g.allFiles))
|
|
||||||
for i := range g.allFiles {
|
|
||||||
set.File[i] = g.allFiles[i].FileDescriptorProto
|
|
||||||
}
|
|
||||||
return set
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *Descriptor) Path() string {
|
|
||||||
return d.path
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *Generator) useTypes() string {
|
|
||||||
pkg := strings.Map(badToUnderscore, "github.com/gogo/protobuf/types")
|
|
||||||
g.customImports = append(g.customImports, "github.com/gogo/protobuf/types")
|
|
||||||
return pkg
|
|
||||||
}
|
|
||||||
|
|
||||||
func (d *FileDescriptor) GoPackageName() string {
|
|
||||||
return string(d.packageName)
|
|
||||||
}
|
|
117
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/remap.go
generated
vendored
117
vendor/github.com/gogo/protobuf/protoc-gen-gogo/generator/internal/remap/remap.go
generated
vendored
@ -1,117 +0,0 @@
|
|||||||
// Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
//
|
|
||||||
// Copyright 2017 The Go Authors. All rights reserved.
|
|
||||||
// https://github.com/golang/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
/*
|
|
||||||
Package remap handles tracking the locations of Go tokens in a source text
|
|
||||||
across a rewrite by the Go formatter.
|
|
||||||
*/
|
|
||||||
package remap
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go/scanner"
|
|
||||||
"go/token"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A Location represents a span of byte offsets in the source text.
|
|
||||||
type Location struct {
|
|
||||||
Pos, End int // End is exclusive
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Map represents a mapping between token locations in an input source text
|
|
||||||
// and locations in the correspnding output text.
|
|
||||||
type Map map[Location]Location
|
|
||||||
|
|
||||||
// Find reports whether the specified span is recorded by m, and if so returns
|
|
||||||
// the new location it was mapped to. If the input span was not found, the
|
|
||||||
// returned location is the same as the input.
|
|
||||||
func (m Map) Find(pos, end int) (Location, bool) {
|
|
||||||
key := Location{
|
|
||||||
Pos: pos,
|
|
||||||
End: end,
|
|
||||||
}
|
|
||||||
if loc, ok := m[key]; ok {
|
|
||||||
return loc, true
|
|
||||||
}
|
|
||||||
return key, false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m Map) add(opos, oend, npos, nend int) {
|
|
||||||
m[Location{Pos: opos, End: oend}] = Location{Pos: npos, End: nend}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute constructs a location mapping from input to output. An error is
|
|
||||||
// reported if any of the tokens of output cannot be mapped.
|
|
||||||
func Compute(input, output []byte) (Map, error) {
|
|
||||||
itok := tokenize(input)
|
|
||||||
otok := tokenize(output)
|
|
||||||
if len(itok) != len(otok) {
|
|
||||||
return nil, fmt.Errorf("wrong number of tokens, %d ≠ %d", len(itok), len(otok))
|
|
||||||
}
|
|
||||||
m := make(Map)
|
|
||||||
for i, ti := range itok {
|
|
||||||
to := otok[i]
|
|
||||||
if ti.Token != to.Token {
|
|
||||||
return nil, fmt.Errorf("token %d type mismatch: %s ≠ %s", i+1, ti, to)
|
|
||||||
}
|
|
||||||
m.add(ti.pos, ti.end, to.pos, to.end)
|
|
||||||
}
|
|
||||||
return m, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// tokinfo records the span and type of a source token.
|
|
||||||
type tokinfo struct {
|
|
||||||
pos, end int
|
|
||||||
token.Token
|
|
||||||
}
|
|
||||||
|
|
||||||
func tokenize(src []byte) []tokinfo {
|
|
||||||
fs := token.NewFileSet()
|
|
||||||
var s scanner.Scanner
|
|
||||||
s.Init(fs.AddFile("src", fs.Base(), len(src)), src, nil, scanner.ScanComments)
|
|
||||||
var info []tokinfo
|
|
||||||
for {
|
|
||||||
pos, next, lit := s.Scan()
|
|
||||||
switch next {
|
|
||||||
case token.SEMICOLON:
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
info = append(info, tokinfo{
|
|
||||||
pos: int(pos - 1),
|
|
||||||
end: int(pos + token.Pos(len(lit)) - 1),
|
|
||||||
Token: next,
|
|
||||||
})
|
|
||||||
if next == token.EOF {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return info
|
|
||||||
}
|
|
536
vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/grpc.go
generated
vendored
536
vendor/github.com/gogo/protobuf/protoc-gen-gogo/grpc/grpc.go
generated
vendored
@ -1,536 +0,0 @@
|
|||||||
// Go support for Protocol Buffers - Google's data interchange format
|
|
||||||
//
|
|
||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// https://github.com/golang/protobuf
|
|
||||||
//
|
|
||||||
// Redistribution and use in source and binary forms, with or without
|
|
||||||
// modification, are permitted provided that the following conditions are
|
|
||||||
// met:
|
|
||||||
//
|
|
||||||
// * Redistributions of source code must retain the above copyright
|
|
||||||
// notice, this list of conditions and the following disclaimer.
|
|
||||||
// * Redistributions in binary form must reproduce the above
|
|
||||||
// copyright notice, this list of conditions and the following disclaimer
|
|
||||||
// in the documentation and/or other materials provided with the
|
|
||||||
// distribution.
|
|
||||||
// * Neither the name of Google Inc. nor the names of its
|
|
||||||
// contributors may be used to endorse or promote products derived from
|
|
||||||
// this software without specific prior written permission.
|
|
||||||
//
|
|
||||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
||||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
// Package grpc outputs gRPC service descriptions in Go code.
|
|
||||||
// It runs as a plugin for the Go protocol buffer compiler plugin.
|
|
||||||
// It is linked in to protoc-gen-go.
|
|
||||||
package grpc
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
pb "github.com/gogo/protobuf/protoc-gen-gogo/descriptor"
|
|
||||||
"github.com/gogo/protobuf/protoc-gen-gogo/generator"
|
|
||||||
)
|
|
||||||
|
|
||||||
// generatedCodeVersion indicates a version of the generated code.
|
|
||||||
// It is incremented whenever an incompatibility between the generated code and
|
|
||||||
// the grpc package is introduced; the generated code references
|
|
||||||
// a constant, grpc.SupportPackageIsVersionN (where N is generatedCodeVersion).
|
|
||||||
const generatedCodeVersion = 4
|
|
||||||
|
|
||||||
// Paths for packages used by code generated in this file,
|
|
||||||
// relative to the import_prefix of the generator.Generator.
|
|
||||||
const (
|
|
||||||
contextPkgPath = "context"
|
|
||||||
grpcPkgPath = "google.golang.org/grpc"
|
|
||||||
codePkgPath = "google.golang.org/grpc/codes"
|
|
||||||
statusPkgPath = "google.golang.org/grpc/status"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
generator.RegisterPlugin(new(grpc))
|
|
||||||
}
|
|
||||||
|
|
||||||
// grpc is an implementation of the Go protocol buffer compiler's
|
|
||||||
// plugin architecture. It generates bindings for gRPC support.
|
|
||||||
type grpc struct {
|
|
||||||
gen *generator.Generator
|
|
||||||
}
|
|
||||||
|
|
||||||
// Name returns the name of this plugin, "grpc".
|
|
||||||
func (g *grpc) Name() string {
|
|
||||||
return "grpc"
|
|
||||||
}
|
|
||||||
|
|
||||||
// The names for packages imported in the generated code.
|
|
||||||
// They may vary from the final path component of the import path
|
|
||||||
// if the name is used by other packages.
|
|
||||||
var (
|
|
||||||
contextPkg string
|
|
||||||
grpcPkg string
|
|
||||||
)
|
|
||||||
|
|
||||||
// Init initializes the plugin.
|
|
||||||
func (g *grpc) Init(gen *generator.Generator) {
|
|
||||||
g.gen = gen
|
|
||||||
}
|
|
||||||
|
|
||||||
// Given a type name defined in a .proto, return its object.
|
|
||||||
// Also record that we're using it, to guarantee the associated import.
|
|
||||||
func (g *grpc) objectNamed(name string) generator.Object {
|
|
||||||
g.gen.RecordTypeUse(name)
|
|
||||||
return g.gen.ObjectNamed(name)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Given a type name defined in a .proto, return its name as we will print it.
|
|
||||||
func (g *grpc) typeName(str string) string {
|
|
||||||
return g.gen.TypeName(g.objectNamed(str))
|
|
||||||
}
|
|
||||||
|
|
||||||
// P forwards to g.gen.P.
|
|
||||||
func (g *grpc) P(args ...interface{}) { g.gen.P(args...) }
|
|
||||||
|
|
||||||
// Generate generates code for the services in the given file.
|
|
||||||
func (g *grpc) Generate(file *generator.FileDescriptor) {
|
|
||||||
if len(file.FileDescriptorProto.Service) == 0 {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
contextPkg = string(g.gen.AddImport(contextPkgPath))
|
|
||||||
grpcPkg = string(g.gen.AddImport(grpcPkgPath))
|
|
||||||
|
|
||||||
g.P("// Reference imports to suppress errors if they are not otherwise used.")
|
|
||||||
g.P("var _ ", contextPkg, ".Context")
|
|
||||||
g.P("var _ ", grpcPkg, ".ClientConn")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
// Assert version compatibility.
|
|
||||||
g.P("// This is a compile-time assertion to ensure that this generated file")
|
|
||||||
g.P("// is compatible with the grpc package it is being compiled against.")
|
|
||||||
g.P("const _ = ", grpcPkg, ".SupportPackageIsVersion", generatedCodeVersion)
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
for i, service := range file.FileDescriptorProto.Service {
|
|
||||||
g.generateService(file, service, i)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// GenerateImports generates the import declaration for this file.
|
|
||||||
func (g *grpc) GenerateImports(file *generator.FileDescriptor) {}
|
|
||||||
|
|
||||||
// reservedClientName records whether a client name is reserved on the client side.
|
|
||||||
var reservedClientName = map[string]bool{
|
|
||||||
// TODO: do we need any in gRPC?
|
|
||||||
}
|
|
||||||
|
|
||||||
func unexport(s string) string { return strings.ToLower(s[:1]) + s[1:] }
|
|
||||||
|
|
||||||
// deprecationComment is the standard comment added to deprecated
|
|
||||||
// messages, fields, enums, and enum values.
|
|
||||||
var deprecationComment = "// Deprecated: Do not use."
|
|
||||||
|
|
||||||
// generateService generates all the code for the named service.
|
|
||||||
func (g *grpc) generateService(file *generator.FileDescriptor, service *pb.ServiceDescriptorProto, index int) {
|
|
||||||
path := fmt.Sprintf("6,%d", index) // 6 means service.
|
|
||||||
|
|
||||||
origServName := service.GetName()
|
|
||||||
fullServName := origServName
|
|
||||||
if pkg := file.GetPackage(); pkg != "" {
|
|
||||||
fullServName = pkg + "." + fullServName
|
|
||||||
}
|
|
||||||
servName := generator.CamelCase(origServName)
|
|
||||||
deprecated := service.GetOptions().GetDeprecated()
|
|
||||||
|
|
||||||
g.P()
|
|
||||||
g.P(fmt.Sprintf(`// %sClient is the client API for %s service.
|
|
||||||
//
|
|
||||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.`, servName, servName))
|
|
||||||
|
|
||||||
// Client interface.
|
|
||||||
if deprecated {
|
|
||||||
g.P("//")
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.P("type ", servName, "Client interface {")
|
|
||||||
for i, method := range service.Method {
|
|
||||||
g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
|
|
||||||
g.P(g.generateClientSignature(servName, method))
|
|
||||||
}
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
// Client structure.
|
|
||||||
g.P("type ", unexport(servName), "Client struct {")
|
|
||||||
g.P("cc *", grpcPkg, ".ClientConn")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
// NewClient factory.
|
|
||||||
if deprecated {
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.P("func New", servName, "Client (cc *", grpcPkg, ".ClientConn) ", servName, "Client {")
|
|
||||||
g.P("return &", unexport(servName), "Client{cc}")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
var methodIndex, streamIndex int
|
|
||||||
serviceDescVar := "_" + servName + "_serviceDesc"
|
|
||||||
// Client method implementations.
|
|
||||||
for _, method := range service.Method {
|
|
||||||
var descExpr string
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
// Unary RPC method
|
|
||||||
descExpr = fmt.Sprintf("&%s.Methods[%d]", serviceDescVar, methodIndex)
|
|
||||||
methodIndex++
|
|
||||||
} else {
|
|
||||||
// Streaming RPC method
|
|
||||||
descExpr = fmt.Sprintf("&%s.Streams[%d]", serviceDescVar, streamIndex)
|
|
||||||
streamIndex++
|
|
||||||
}
|
|
||||||
g.generateClientMethod(servName, fullServName, serviceDescVar, method, descExpr)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Server interface.
|
|
||||||
serverType := servName + "Server"
|
|
||||||
g.P("// ", serverType, " is the server API for ", servName, " service.")
|
|
||||||
if deprecated {
|
|
||||||
g.P("//")
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.P("type ", serverType, " interface {")
|
|
||||||
for i, method := range service.Method {
|
|
||||||
g.gen.PrintComments(fmt.Sprintf("%s,2,%d", path, i)) // 2 means method in a service.
|
|
||||||
g.P(g.generateServerSignature(servName, method))
|
|
||||||
}
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
// Server Unimplemented struct for forward compatability.
|
|
||||||
if deprecated {
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.generateUnimplementedServer(servName, service)
|
|
||||||
|
|
||||||
// Server registration.
|
|
||||||
if deprecated {
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.P("func Register", servName, "Server(s *", grpcPkg, ".Server, srv ", serverType, ") {")
|
|
||||||
g.P("s.RegisterService(&", serviceDescVar, `, srv)`)
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
// Server handler implementations.
|
|
||||||
var handlerNames []string
|
|
||||||
for _, method := range service.Method {
|
|
||||||
hname := g.generateServerMethod(servName, fullServName, method)
|
|
||||||
handlerNames = append(handlerNames, hname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Service descriptor.
|
|
||||||
g.P("var ", serviceDescVar, " = ", grpcPkg, ".ServiceDesc {")
|
|
||||||
g.P("ServiceName: ", strconv.Quote(fullServName), ",")
|
|
||||||
g.P("HandlerType: (*", serverType, ")(nil),")
|
|
||||||
g.P("Methods: []", grpcPkg, ".MethodDesc{")
|
|
||||||
for i, method := range service.Method {
|
|
||||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
g.P("{")
|
|
||||||
g.P("MethodName: ", strconv.Quote(method.GetName()), ",")
|
|
||||||
g.P("Handler: ", handlerNames[i], ",")
|
|
||||||
g.P("},")
|
|
||||||
}
|
|
||||||
g.P("},")
|
|
||||||
g.P("Streams: []", grpcPkg, ".StreamDesc{")
|
|
||||||
for i, method := range service.Method {
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
g.P("{")
|
|
||||||
g.P("StreamName: ", strconv.Quote(method.GetName()), ",")
|
|
||||||
g.P("Handler: ", handlerNames[i], ",")
|
|
||||||
if method.GetServerStreaming() {
|
|
||||||
g.P("ServerStreams: true,")
|
|
||||||
}
|
|
||||||
if method.GetClientStreaming() {
|
|
||||||
g.P("ClientStreams: true,")
|
|
||||||
}
|
|
||||||
g.P("},")
|
|
||||||
}
|
|
||||||
g.P("},")
|
|
||||||
g.P("Metadata: \"", file.GetName(), "\",")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
// generateUnimplementedServer creates the unimplemented server struct
|
|
||||||
func (g *grpc) generateUnimplementedServer(servName string, service *pb.ServiceDescriptorProto) {
|
|
||||||
serverType := servName + "Server"
|
|
||||||
g.P("// Unimplemented", serverType, " can be embedded to have forward compatible implementations.")
|
|
||||||
g.P("type Unimplemented", serverType, " struct {")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
// Unimplemented<service_name>Server's concrete methods
|
|
||||||
for _, method := range service.Method {
|
|
||||||
g.generateServerMethodConcrete(servName, method)
|
|
||||||
}
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
// generateServerMethodConcrete returns unimplemented methods which ensure forward compatibility
|
|
||||||
func (g *grpc) generateServerMethodConcrete(servName string, method *pb.MethodDescriptorProto) {
|
|
||||||
header := g.generateServerSignatureWithParamNames(servName, method)
|
|
||||||
g.P("func (*Unimplemented", servName, "Server) ", header, " {")
|
|
||||||
var nilArg string
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
nilArg = "nil, "
|
|
||||||
}
|
|
||||||
methName := generator.CamelCase(method.GetName())
|
|
||||||
statusPkg := string(g.gen.AddImport(statusPkgPath))
|
|
||||||
codePkg := string(g.gen.AddImport(codePkgPath))
|
|
||||||
g.P("return ", nilArg, statusPkg, `.Errorf(`, codePkg, `.Unimplemented, "method `, methName, ` not implemented")`)
|
|
||||||
g.P("}")
|
|
||||||
}
|
|
||||||
|
|
||||||
// generateClientSignature returns the client-side signature for a method.
|
|
||||||
func (g *grpc) generateClientSignature(servName string, method *pb.MethodDescriptorProto) string {
|
|
||||||
origMethName := method.GetName()
|
|
||||||
methName := generator.CamelCase(origMethName)
|
|
||||||
if reservedClientName[methName] {
|
|
||||||
methName += "_"
|
|
||||||
}
|
|
||||||
reqArg := ", in *" + g.typeName(method.GetInputType())
|
|
||||||
if method.GetClientStreaming() {
|
|
||||||
reqArg = ""
|
|
||||||
}
|
|
||||||
respName := "*" + g.typeName(method.GetOutputType())
|
|
||||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
|
||||||
respName = servName + "_" + generator.CamelCase(origMethName) + "Client"
|
|
||||||
}
|
|
||||||
return fmt.Sprintf("%s(ctx %s.Context%s, opts ...%s.CallOption) (%s, error)", methName, contextPkg, reqArg, grpcPkg, respName)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *grpc) generateClientMethod(servName, fullServName, serviceDescVar string, method *pb.MethodDescriptorProto, descExpr string) {
|
|
||||||
sname := fmt.Sprintf("/%s/%s", fullServName, method.GetName())
|
|
||||||
methName := generator.CamelCase(method.GetName())
|
|
||||||
inType := g.typeName(method.GetInputType())
|
|
||||||
outType := g.typeName(method.GetOutputType())
|
|
||||||
|
|
||||||
if method.GetOptions().GetDeprecated() {
|
|
||||||
g.P(deprecationComment)
|
|
||||||
}
|
|
||||||
g.P("func (c *", unexport(servName), "Client) ", g.generateClientSignature(servName, method), "{")
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
g.P("out := new(", outType, ")")
|
|
||||||
// TODO: Pass descExpr to Invoke.
|
|
||||||
g.P(`err := c.cc.Invoke(ctx, "`, sname, `", in, out, opts...)`)
|
|
||||||
g.P("if err != nil { return nil, err }")
|
|
||||||
g.P("return out, nil")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
streamType := unexport(servName) + methName + "Client"
|
|
||||||
g.P("stream, err := c.cc.NewStream(ctx, ", descExpr, `, "`, sname, `", opts...)`)
|
|
||||||
g.P("if err != nil { return nil, err }")
|
|
||||||
g.P("x := &", streamType, "{stream}")
|
|
||||||
if !method.GetClientStreaming() {
|
|
||||||
g.P("if err := x.ClientStream.SendMsg(in); err != nil { return nil, err }")
|
|
||||||
g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
|
|
||||||
}
|
|
||||||
g.P("return x, nil")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
genSend := method.GetClientStreaming()
|
|
||||||
genRecv := method.GetServerStreaming()
|
|
||||||
genCloseAndRecv := !method.GetServerStreaming()
|
|
||||||
|
|
||||||
// Stream auxiliary types and methods.
|
|
||||||
g.P("type ", servName, "_", methName, "Client interface {")
|
|
||||||
if genSend {
|
|
||||||
g.P("Send(*", inType, ") error")
|
|
||||||
}
|
|
||||||
if genRecv {
|
|
||||||
g.P("Recv() (*", outType, ", error)")
|
|
||||||
}
|
|
||||||
if genCloseAndRecv {
|
|
||||||
g.P("CloseAndRecv() (*", outType, ", error)")
|
|
||||||
}
|
|
||||||
g.P(grpcPkg, ".ClientStream")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
g.P("type ", streamType, " struct {")
|
|
||||||
g.P(grpcPkg, ".ClientStream")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
if genSend {
|
|
||||||
g.P("func (x *", streamType, ") Send(m *", inType, ") error {")
|
|
||||||
g.P("return x.ClientStream.SendMsg(m)")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
if genRecv {
|
|
||||||
g.P("func (x *", streamType, ") Recv() (*", outType, ", error) {")
|
|
||||||
g.P("m := new(", outType, ")")
|
|
||||||
g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
|
|
||||||
g.P("return m, nil")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
if genCloseAndRecv {
|
|
||||||
g.P("func (x *", streamType, ") CloseAndRecv() (*", outType, ", error) {")
|
|
||||||
g.P("if err := x.ClientStream.CloseSend(); err != nil { return nil, err }")
|
|
||||||
g.P("m := new(", outType, ")")
|
|
||||||
g.P("if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err }")
|
|
||||||
g.P("return m, nil")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// generateServerSignatureWithParamNames returns the server-side signature for a method with parameter names.
|
|
||||||
func (g *grpc) generateServerSignatureWithParamNames(servName string, method *pb.MethodDescriptorProto) string {
|
|
||||||
origMethName := method.GetName()
|
|
||||||
methName := generator.CamelCase(origMethName)
|
|
||||||
if reservedClientName[methName] {
|
|
||||||
methName += "_"
|
|
||||||
}
|
|
||||||
|
|
||||||
var reqArgs []string
|
|
||||||
ret := "error"
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, "ctx "+contextPkg+".Context")
|
|
||||||
ret = "(*" + g.typeName(method.GetOutputType()) + ", error)"
|
|
||||||
}
|
|
||||||
if !method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, "req *"+g.typeName(method.GetInputType()))
|
|
||||||
}
|
|
||||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, "srv "+servName+"_"+generator.CamelCase(origMethName)+"Server")
|
|
||||||
}
|
|
||||||
|
|
||||||
return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
|
|
||||||
}
|
|
||||||
|
|
||||||
// generateServerSignature returns the server-side signature for a method.
|
|
||||||
func (g *grpc) generateServerSignature(servName string, method *pb.MethodDescriptorProto) string {
|
|
||||||
origMethName := method.GetName()
|
|
||||||
methName := generator.CamelCase(origMethName)
|
|
||||||
if reservedClientName[methName] {
|
|
||||||
methName += "_"
|
|
||||||
}
|
|
||||||
|
|
||||||
var reqArgs []string
|
|
||||||
ret := "error"
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, contextPkg+".Context")
|
|
||||||
ret = "(*" + g.typeName(method.GetOutputType()) + ", error)"
|
|
||||||
}
|
|
||||||
if !method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, "*"+g.typeName(method.GetInputType()))
|
|
||||||
}
|
|
||||||
if method.GetServerStreaming() || method.GetClientStreaming() {
|
|
||||||
reqArgs = append(reqArgs, servName+"_"+generator.CamelCase(origMethName)+"Server")
|
|
||||||
}
|
|
||||||
|
|
||||||
return methName + "(" + strings.Join(reqArgs, ", ") + ") " + ret
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *grpc) generateServerMethod(servName, fullServName string, method *pb.MethodDescriptorProto) string {
|
|
||||||
methName := generator.CamelCase(method.GetName())
|
|
||||||
hname := fmt.Sprintf("_%s_%s_Handler", servName, methName)
|
|
||||||
inType := g.typeName(method.GetInputType())
|
|
||||||
outType := g.typeName(method.GetOutputType())
|
|
||||||
|
|
||||||
if !method.GetServerStreaming() && !method.GetClientStreaming() {
|
|
||||||
g.P("func ", hname, "(srv interface{}, ctx ", contextPkg, ".Context, dec func(interface{}) error, interceptor ", grpcPkg, ".UnaryServerInterceptor) (interface{}, error) {")
|
|
||||||
g.P("in := new(", inType, ")")
|
|
||||||
g.P("if err := dec(in); err != nil { return nil, err }")
|
|
||||||
g.P("if interceptor == nil { return srv.(", servName, "Server).", methName, "(ctx, in) }")
|
|
||||||
g.P("info := &", grpcPkg, ".UnaryServerInfo{")
|
|
||||||
g.P("Server: srv,")
|
|
||||||
g.P("FullMethod: ", strconv.Quote(fmt.Sprintf("/%s/%s", fullServName, methName)), ",")
|
|
||||||
g.P("}")
|
|
||||||
g.P("handler := func(ctx ", contextPkg, ".Context, req interface{}) (interface{}, error) {")
|
|
||||||
g.P("return srv.(", servName, "Server).", methName, "(ctx, req.(*", inType, "))")
|
|
||||||
g.P("}")
|
|
||||||
g.P("return interceptor(ctx, in, info, handler)")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
return hname
|
|
||||||
}
|
|
||||||
streamType := unexport(servName) + methName + "Server"
|
|
||||||
g.P("func ", hname, "(srv interface{}, stream ", grpcPkg, ".ServerStream) error {")
|
|
||||||
if !method.GetClientStreaming() {
|
|
||||||
g.P("m := new(", inType, ")")
|
|
||||||
g.P("if err := stream.RecvMsg(m); err != nil { return err }")
|
|
||||||
g.P("return srv.(", servName, "Server).", methName, "(m, &", streamType, "{stream})")
|
|
||||||
} else {
|
|
||||||
g.P("return srv.(", servName, "Server).", methName, "(&", streamType, "{stream})")
|
|
||||||
}
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
genSend := method.GetServerStreaming()
|
|
||||||
genSendAndClose := !method.GetServerStreaming()
|
|
||||||
genRecv := method.GetClientStreaming()
|
|
||||||
|
|
||||||
// Stream auxiliary types and methods.
|
|
||||||
g.P("type ", servName, "_", methName, "Server interface {")
|
|
||||||
if genSend {
|
|
||||||
g.P("Send(*", outType, ") error")
|
|
||||||
}
|
|
||||||
if genSendAndClose {
|
|
||||||
g.P("SendAndClose(*", outType, ") error")
|
|
||||||
}
|
|
||||||
if genRecv {
|
|
||||||
g.P("Recv() (*", inType, ", error)")
|
|
||||||
}
|
|
||||||
g.P(grpcPkg, ".ServerStream")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
g.P("type ", streamType, " struct {")
|
|
||||||
g.P(grpcPkg, ".ServerStream")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
|
|
||||||
if genSend {
|
|
||||||
g.P("func (x *", streamType, ") Send(m *", outType, ") error {")
|
|
||||||
g.P("return x.ServerStream.SendMsg(m)")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
if genSendAndClose {
|
|
||||||
g.P("func (x *", streamType, ") SendAndClose(m *", outType, ") error {")
|
|
||||||
g.P("return x.ServerStream.SendMsg(m)")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
if genRecv {
|
|
||||||
g.P("func (x *", streamType, ") Recv() (*", inType, ", error) {")
|
|
||||||
g.P("m := new(", inType, ")")
|
|
||||||
g.P("if err := x.ServerStream.RecvMsg(m); err != nil { return nil, err }")
|
|
||||||
g.P("return m, nil")
|
|
||||||
g.P("}")
|
|
||||||
g.P()
|
|
||||||
}
|
|
||||||
|
|
||||||
return hname
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user