initial commit
This commit is contained in:
@@ -126,6 +126,15 @@ func (s *FeatureFlagStage) UnmarshalJSON(b []byte) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
type FeatureFlagType string
|
||||
|
||||
const (
|
||||
Boolean = "boolean"
|
||||
Number = "number"
|
||||
Object = "object"
|
||||
String = "string"
|
||||
)
|
||||
|
||||
// These are properties about the feature, but not the current state or value for it
|
||||
type FeatureFlag struct {
|
||||
Name string `json:"name" yaml:"name"` // Unique name
|
||||
@@ -143,6 +152,8 @@ type FeatureFlag struct {
|
||||
|
||||
// The server must be initialized with the value
|
||||
RequiresRestart bool `json:"requiresRestart,omitempty"`
|
||||
|
||||
Type FeatureFlagType `json:"type,omitempty"`
|
||||
}
|
||||
|
||||
type FeatureToggleWebhookPayload struct {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package featuremgmt
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/open-feature/go-sdk/openfeature"
|
||||
"github.com/open-feature/go-sdk/openfeature/memprovider"
|
||||
)
|
||||
@@ -38,10 +39,18 @@ func newStaticProvider(confFlags map[string]bool) (openfeature.FeatureProvider,
|
||||
|
||||
// Add standard flags
|
||||
for _, flag := range standardFeatureFlags {
|
||||
if _, exists := flags[flag.Name]; !exists {
|
||||
enabled := flag.Expression == "true"
|
||||
flags[flag.Name] = createInMemoryFlag(flag.Name, enabled)
|
||||
_, exists := flags[flag.Name]
|
||||
|
||||
if exists && flag.Type != Boolean {
|
||||
return nil, fmt.Errorf("flag %s already exists", flag.Name)
|
||||
}
|
||||
|
||||
inMemFlag, err := createFlag(flag)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
flags[flag.Name] = inMemFlag
|
||||
}
|
||||
|
||||
return newInMemoryBulkProvider(flags), nil
|
||||
@@ -62,3 +71,31 @@ func createInMemoryFlag(name string, enabled bool) memprovider.InMemoryFlag {
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func createFlag(flag FeatureFlag) (memprovider.InMemoryFlag, error) {
|
||||
defaultVariant := "default"
|
||||
|
||||
var value any
|
||||
switch flag.Type {
|
||||
case Boolean:
|
||||
value = flag.Expression == "true"
|
||||
case String:
|
||||
value = flag.Expression
|
||||
case Number:
|
||||
value = f
|
||||
case Object:
|
||||
value = value
|
||||
default:
|
||||
return memprovider.InMemoryFlag{}, fmt.Errorf("unsupported flag type %s", flag.Type)
|
||||
}
|
||||
|
||||
return memprovider.InMemoryFlag{
|
||||
Key: flag.Name,
|
||||
DefaultVariant: defaultVariant,
|
||||
Variants: map[string]any{
|
||||
defaultVariant: value,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func
|
||||
|
||||
Reference in New Issue
Block a user