mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-22 07:01:09 +02:00
* apply oss changes from https://github.com/hashicorp/vault-enterprise/pull/8071 * handle oss file deletions * go mod tidy * add changelog
103 lines
2.6 KiB
Go
103 lines
2.6 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
package consts
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
)
|
|
|
|
var PluginTiers = []PluginTier{
|
|
PluginTierUnknown,
|
|
PluginTierCommunity,
|
|
PluginTierPartner,
|
|
PluginTierOfficial,
|
|
}
|
|
|
|
type PluginTier uint32
|
|
|
|
const (
|
|
// PluginTierUnknown defines unknown plugin tier
|
|
// DO NOT change the order of the enum as it
|
|
// could cause the wrong plugin tier to be read
|
|
// from storage for a given underlying number
|
|
PluginTierUnknown PluginTier = iota
|
|
// PluginTierCommunity defines community plugin tier
|
|
// DO NOT change the order of the enum as it
|
|
// could cause the wrong plugin tier to be read
|
|
// from storage for a given underlying number
|
|
PluginTierCommunity
|
|
// PluginTierPartner defines partner plugin tier
|
|
// DO NOT change the order of the enum as it
|
|
// could cause the wrong plugin tier to be read
|
|
// from storage for a given underlying number
|
|
PluginTierPartner
|
|
// PluginTierOfficial defines enterprise plugin tier
|
|
// DO NOT change the order of the enum as it
|
|
// could cause the wrong plugin tier to be read
|
|
// from storage for a given underlying number
|
|
PluginTierOfficial
|
|
)
|
|
|
|
func (p PluginTier) String() string {
|
|
switch p {
|
|
case PluginTierUnknown:
|
|
return "unknown"
|
|
case PluginTierCommunity:
|
|
return "community"
|
|
case PluginTierPartner:
|
|
return "partner"
|
|
case PluginTierOfficial:
|
|
return "official"
|
|
default:
|
|
return "unsupported"
|
|
}
|
|
}
|
|
|
|
func ParsePluginTier(pluginTier string) (PluginTier, error) {
|
|
switch pluginTier {
|
|
case "unknown", "":
|
|
return PluginTierUnknown, nil
|
|
case "community":
|
|
return PluginTierCommunity, nil
|
|
case "partner":
|
|
return PluginTierPartner, nil
|
|
case "official":
|
|
return PluginTierOfficial, nil
|
|
default:
|
|
return PluginTierUnknown, fmt.Errorf("%q is not a supported plugin tier", pluginTier)
|
|
}
|
|
}
|
|
|
|
// UnmarshalJSON implements json.Unmarshaler. It supports unmarshaling either a
|
|
// string or a uint32. All new serialization will be as a string, but we
|
|
// previously serialized as a uint32 so we need to support that for backwards
|
|
// compatibility.
|
|
func (p *PluginTier) UnmarshalJSON(data []byte) error {
|
|
var asString string
|
|
err := json.Unmarshal(data, &asString)
|
|
if err == nil {
|
|
*p, err = ParsePluginTier(asString)
|
|
return err
|
|
}
|
|
|
|
var asUint32 uint32
|
|
err = json.Unmarshal(data, &asUint32)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
*p = PluginTier(asUint32)
|
|
switch *p {
|
|
case PluginTierUnknown, PluginTierCommunity, PluginTierPartner, PluginTierOfficial:
|
|
return nil
|
|
default:
|
|
return fmt.Errorf("%d is not a supported plugin tier", asUint32)
|
|
}
|
|
}
|
|
|
|
// MarshalJSON implements json.Marshaler.
|
|
func (p PluginTier) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(p.String())
|
|
}
|