vault/sdk/helper/consts/plugin_tiers.go
helenfufu 71edba2ccb
Vault 34905 support register ce plugin with extracted artifact (#30673)
* apply oss changes from https://github.com/hashicorp/vault-enterprise/pull/8071

* handle oss file deletions

* go mod tidy

* add changelog
2025-05-22 08:39:47 -07:00

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())
}