schnutibox/vendor/github.com/bufbuild/buf/internal/pkg/protoversion/protoversion.go

88 lines
2.3 KiB
Go
Raw Permalink Normal View History

// Copyright 2020-2021 Buf Technologies, Inc.
//
// 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.
package protoversion
import (
"fmt"
"strconv"
)
const (
// StabilityLevelStable is stable.
StabilityLevelStable StabilityLevel = iota + 1
// StabilityLevelAlpha is alpha stability.
StabilityLevelAlpha
// StabilityLevelBeta is beta stability.
StabilityLevelBeta
// StabilityLevelTest is test stability.
StabilityLevelTest
)
var (
stabilityLevelToString = map[StabilityLevel]string{
StabilityLevelStable: "",
StabilityLevelAlpha: "alpha",
StabilityLevelBeta: "beta",
StabilityLevelTest: "test",
}
)
// StabilityLevel is the stability level.
type StabilityLevel int
// String implements fmt.Stringer.
func (s StabilityLevel) String() string {
value, ok := stabilityLevelToString[s]
if ok {
return value
}
return strconv.Itoa(int(s))
}
// PackageVersion is a package version.
//
// A package has a version if the last component is a version of the form
// v\d+, v\d+test.*, v\d+(alpha|beta)\d+, or v\d+p\d+(alpha|beta)\d+
// where numbers are >=1.
type PackageVersion interface {
fmt.Stringer
// Required.
// Will always be >=1.
Major() int
// Required.
StabilityLevel() StabilityLevel
// Optional.
// Only potentially set if the stability level is alpha or beta.
// Will always be >=1.
Minor() int
// Optional.
// Only potentially set if the stability level is alpha or beta.
// Will always be >=1.
Patch() int
// Optional.
// Only potentially set if the stability level is test.
Suffix() string
isPackageVersion()
}
// NewPackageVersionForPackage returns the PackageVersion for the package.
//
// Returns false if the package has no package version per the specifications.
func NewPackageVersionForPackage(pkg string) (PackageVersion, bool) {
return newPackageVersionForPackage(pkg)
}