blob: 2aac78c870181cfa3f303efbf2e97ddf6a268ea2 [file] [log] [blame]
// Copyright 2021 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.
package compliance
import (
"fmt"
)
// LicenseCondition identifies a recognized license condition by setting the
// corresponding bit.
type LicenseCondition uint16
// LicenseConditionMask is a bitmask for the recognized license conditions.
const LicenseConditionMask = LicenseCondition(0x1ff)
const (
// UnencumberedCondition identifies public domain or public domain-
// like license that disclaims copyright.
UnencumberedCondition = LicenseCondition(0x0001)
// PermissiveCondition identifies a license without notice or other
// significant requirements.
PermissiveCondition = LicenseCondition(0x0002)
// NoticeCondition identifies a typical open-source license with only
// notice or attribution requirements.
NoticeCondition = LicenseCondition(0x0004)
// ReciprocalCondition identifies a license with requirement to share
// the module's source only.
ReciprocalCondition = LicenseCondition(0x0008)
// RestrictedCondition identifies a license with requirement to share
// all source code linked to the module's source.
RestrictedCondition = LicenseCondition(0x0010)
// WeaklyRestrictedCondition identifies a RestrictedCondition waived
// for dynamic linking.
WeaklyRestrictedCondition = LicenseCondition(0x0020)
// ProprietaryCondition identifies a license with source privacy
// requirements.
ProprietaryCondition = LicenseCondition(0x0040)
// ByExceptionOnly identifies a license where policy requires product
// counsel review prior to use.
ByExceptionOnlyCondition = LicenseCondition(0x0080)
// NotAllowedCondition identifies a license with onerous conditions
// where policy prohibits use.
NotAllowedCondition = LicenseCondition(0x0100)
)
var (
// RecognizedConditionNames maps condition strings to LicenseCondition.
RecognizedConditionNames = map[string]LicenseCondition{
"unencumbered": UnencumberedCondition,
"permissive": PermissiveCondition,
"notice": NoticeCondition,
"reciprocal": ReciprocalCondition,
"restricted": RestrictedCondition,
"restricted_if_statically_linked": WeaklyRestrictedCondition,
"proprietary": ProprietaryCondition,
"by_exception_only": ByExceptionOnlyCondition,
"not_allowed": NotAllowedCondition,
}
)
// Name returns the condition string corresponding to the LicenseCondition.
func (lc LicenseCondition) Name() string {
switch lc {
case UnencumberedCondition:
return "unencumbered"
case PermissiveCondition:
return "permissive"
case NoticeCondition:
return "notice"
case ReciprocalCondition:
return "reciprocal"
case RestrictedCondition:
return "restricted"
case WeaklyRestrictedCondition:
return "restricted_if_statically_linked"
case ProprietaryCondition:
return "proprietary"
case ByExceptionOnlyCondition:
return "by_exception_only"
case NotAllowedCondition:
return "not_allowed"
}
panic(fmt.Errorf("unrecognized license condition: %#v", lc))
}