func()

in pkg/confidence/confidence.go [203:248]


func (e Confidence) ResolveFlag(ctx context.Context, flag string, defaultValue interface{}, expectedKind reflect.Kind) InterfaceResolutionDetail {
	flagName, propertyPath := splitFlagString(flag)

	requestFlagName := fmt.Sprintf("flags/%s", flagName)
	resp, err := e.ResolveClient.SendResolveRequest(ctx,
		ResolveRequest{ClientSecret: e.Config.APIKey,
			Flags: []string{requestFlagName}, Apply: true, EvaluationContext: e.contextMap,
			Sdk: sdk{Id: SDK_ID, Version: SDK_VERSION}})

	if err != nil {
		slog.Warn("Error in resolving flag", "flag", flag, "error", err)
		return processResolveError(err, defaultValue)
	}
	logResolveTesterHint(e.Logger, flagName, e.Config.APIKey, e.contextMap)

	if len(resp.ResolvedFlags) == 0 {
		slog.Debug("Flag not found", "flag", flag)
		return InterfaceResolutionDetail{
			Value: defaultValue,
			ResolutionDetail: ResolutionDetail{
				Variant:      "",
				Reason:       ErrorReason,
				ErrorCode:    FlagNotFoundCode,
				ErrorMessage: "Flag not found",
				FlagMetadata: nil,
			},
		}
	}

	resolvedFlag := resp.ResolvedFlags[0]
	if resolvedFlag.Flag != requestFlagName {
		slog.Warn("Unexpected flag from remote", "flag", resolvedFlag.Flag)
		return InterfaceResolutionDetail{
			Value: defaultValue,
			ResolutionDetail: ResolutionDetail{
				Variant:      "",
				Reason:       ErrorReason,
				ErrorCode:    FlagNotFoundCode,
				ErrorMessage: fmt.Sprintf("unexpected flag '%s' from remote", strings.TrimPrefix(resolvedFlag.Flag, "flags/")),
				FlagMetadata: nil,
			},
		}
	}

	return processResolvedFlag(resolvedFlag, defaultValue, expectedKind, propertyPath)
}