pkg/confidence/models.go (108 lines of code) (raw):
package confidence
import (
"context"
"errors"
)
func NewFlagNotFoundResolutionError(msg string) ResolutionError {
return ResolutionError{
code: FlagNotFoundCode,
message: msg,
}
}
func NewParseErrorResolutionError(msg string) ResolutionError {
return ResolutionError{
code: ParseErrorCode,
message: msg,
}
}
// NewTypeMismatchResolutionError constructs a resolution error with code TYPE_MISMATCH
//
// Explanation - The type of the flag value does not match the expected type.
func NewTypeMismatchResolutionError(msg string) ResolutionError {
return ResolutionError{
code: TypeMismatchCode,
message: msg,
}
}
// NewTargetingKeyMissingResolutionError constructs a resolution error with code TARGETING_KEY_MISSING
//
// Explanation - The provider requires a targeting key and one was not provided in the evaluation context.
func NewTargetingKeyMissingResolutionError(msg string) ResolutionError {
return ResolutionError{
code: TargetingKeyMissingCode,
message: msg,
}
}
func NewInvalidContextResolutionError(msg string) ResolutionError {
return ResolutionError{
code: InvalidContextCode,
message: msg,
}
}
// NewGeneralResolutionError constructs a resolution error with code GENERAL
//
// Explanation - The error was for a reason not enumerated above.
func NewGeneralResolutionError(msg string) ResolutionError {
return ResolutionError{
code: GeneralCode,
message: msg,
}
}
const DefaultAPIResolveBaseUrl = "https://resolver.confidence.dev"
type APIConfig struct {
APIKey string
APIResolveBaseUrl string
}
func NewAPIConfig(apiKey string) *APIConfig {
return &APIConfig{
APIKey: apiKey,
APIResolveBaseUrl: DefaultAPIResolveBaseUrl,
}
}
func NewAPIConfigWithUrl(apiKey, APIResolveBaseUrl string) *APIConfig {
return &APIConfig{
APIKey: apiKey,
APIResolveBaseUrl: APIResolveBaseUrl,
}
}
func (c APIConfig) Validate() error {
if c.APIKey == "" {
return errors.New("api key needs to be set")
}
return nil
}
type ResolveClient interface {
SendResolveRequest(ctx context.Context, request ResolveRequest) (ResolveResponse, error)
}
var errFlagNotFound = errors.New("flag not found")
type EventBatchRequest struct {
CclientSecret string `json:"clientSecret"`
Sdk sdk `json:"sdk"`
SendTime string `json:"sendTime"`
Events []Event `json:"events"`
}
type Event struct {
EventDefinition string `json:"eventDefinition"`
EventTime string `json:"eventTime"`
Payload map[string]interface{} `json:"payload"`
}
type ResolveRequest struct {
ClientSecret string `json:"client_secret"`
Apply bool `json:"apply"`
EvaluationContext map[string]interface{} `json:"evaluation_context"`
Flags []string `json:"flags"`
Sdk sdk `json:"sdk"`
}
type sdk struct {
Id string `json:"id"`
Version string `json:"version"`
}
type ResolveResponse struct {
ResolvedFlags []resolvedFlag `json:"resolvedFlags"`
ResolveToken string `json:"resolveToken"`
}
type resolveErrorMessage struct {
Code int64 `json:"code"`
Message string `json:"message"`
}
type resolvedFlag struct {
Flag string `json:"flag"`
Variant string `json:"variant"`
Reason string `json:"reason"`
Value map[string]interface{} `json:"value"`
FlagSchema flagSchema `json:"flagSchema"`
}
type flagSchema struct {
Schema map[string]interface{} `json:"schema"`
}