// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Package protoimpl contains the default implementation for messages
// generated by protoc-gen-go.
//
// WARNING: This package should only ever be imported by generated messages.
// The compatibility agreement covers nothing except for functionality needed
// to keep existing generated messages operational. Breakages that occur due
// to unauthorized usages of this package are not the author's responsibility.
package protoimpl

import (
	"github.com/golang/protobuf/v2/internal/fileinit"
	"github.com/golang/protobuf/v2/internal/impl"
)

// Version is the current minor version of the package.
// This is incremented every time the API of this package expands.
const Version = 0 // v2.{Version}.x

var X impl.Export

type (
	// EnforceVersion is used by code generated by protoc-gen-go
	// to statically enforce a minimum version of this package.
	// A compilation failure implies that this package is too old and
	// needs to be updated to a more recent version.
	//
	// This package can be upgraded by running:
	//	go get -u github.com/golang/protobuf/v2/...
	//
	// Example usage by generated code:
	//	const _ = protoimpl.EnforceVersion(protoimpl.Version - genVersion)
	//
	// If genVersion is lower than Version, then this results in a negative
	// integer overflow failure when evaluating the uint constant.
	EnforceVersion uint

	MessageType = impl.MessageType
	FileBuilder = fileinit.FileBuilder
)
