module Util where import Control.Monad (void) import Data.Function ((&)) import qualified Data.Text as T import qualified Data.Text.Encoding as T import qualified Database.Redis as R import LaunchDarkly.AesonCompat (KeyMap, emptyObject, insertKey, singleton) import LaunchDarkly.Server.Store (PersistentDataStore (..), SerializedItemDescriptor (..)) import LaunchDarkly.Server.Store.Redis (makeRedisStore, makeRedisStoreConfig, redisConfigSetNamespace) defaultPrefix :: T.Text defaultPrefix = "launchdarkly-test-prefix" emptyData :: KeyMap (KeyMap SerializedItemDescriptor) emptyData = emptyObject & insertKey "features" emptyObject & insertKey "segments" emptyObject initialFlag :: SerializedItemDescriptor initialFlag = SerializedItemDescriptor {version = 1, deleted = False, item = Just $ T.encodeUtf8 "flag"} initialSegment :: SerializedItemDescriptor initialSegment = SerializedItemDescriptor {version = 1, deleted = False, item = Just $ T.encodeUtf8 "segment"} initialData :: KeyMap (KeyMap SerializedItemDescriptor) initialData = emptyObject & insertKey "features" (singleton "first-flag" initialFlag) & insertKey "segments" (singleton "first-segment" initialSegment) makeDefaultRedisBackend :: T.Text -> IO PersistentDataStore makeDefaultRedisBackend prefix = do con <- R.checkedConnect R.defaultConnectInfo void $ R.runRedis con R.flushall makeRedisStore $ redisConfigSetNamespace prefix $ makeRedisStoreConfig con