version.go raw

   1  // Copyright 2019 The Go Authors. All rights reserved.
   2  // Use of this source code is governed by a BSD-style
   3  // license that can be found in the LICENSE file.
   4  
   5  package protoimpl
   6  
   7  import (
   8  	"google.golang.org/protobuf/internal/version"
   9  )
  10  
  11  const (
  12  	// MaxVersion is the maximum supported version for generated .pb.go files.
  13  	// It is always the current version of the module.
  14  	MaxVersion = version.Minor
  15  
  16  	// GenVersion is the runtime version required by generated .pb.go files.
  17  	// This is incremented when generated code relies on new functionality
  18  	// in the runtime.
  19  	GenVersion = 20
  20  
  21  	// MinVersion is the minimum supported version for generated .pb.go files.
  22  	// This is incremented when the runtime drops support for old code.
  23  	MinVersion = 0
  24  )
  25  
  26  // EnforceVersion is used by code generated by protoc-gen-go
  27  // to statically enforce minimum and maximum versions of this package.
  28  // A compilation failure implies either that:
  29  //   - the runtime package is too old and needs to be updated OR
  30  //   - the generated code is too old and needs to be regenerated.
  31  //
  32  // The runtime package can be upgraded by running:
  33  //
  34  //	go get google.golang.org/protobuf
  35  //
  36  // The generated code can be regenerated by running:
  37  //
  38  //	protoc --go_out=${PROTOC_GEN_GO_ARGS} ${PROTO_FILES}
  39  //
  40  // Example usage by generated code:
  41  //
  42  //	const (
  43  //		// Verify that this generated code is sufficiently up-to-date.
  44  //		_ = protoimpl.EnforceVersion(genVersion - protoimpl.MinVersion)
  45  //		// Verify that runtime/protoimpl is sufficiently up-to-date.
  46  //		_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - genVersion)
  47  //	)
  48  //
  49  // The genVersion is the current minor version used to generated the code.
  50  // This compile-time check relies on negative integer overflow of a uint
  51  // being a compilation failure (guaranteed by the Go specification).
  52  type EnforceVersion uint
  53  
  54  // This enforces the following invariant:
  55  //
  56  //	MinVersion ≤ GenVersion ≤ MaxVersion
  57  const (
  58  	_ = EnforceVersion(GenVersion - MinVersion)
  59  	_ = EnforceVersion(MaxVersion - GenVersion)
  60  )
  61