packages feed

feature-flipper-0.2.0.0: examples/environment-config/Main.hs

module Main where

import           Control.Monad.State
import qualified Data.Map.Strict                 as Map
import           Data.Maybe                      (maybe)
import qualified System.Environment              as Env

import           Control.Flipper
import           Control.Flipper.Adapters.Memory

main :: IO ()
main = do
    features <- loadFeatures

    -- StateT has a HasFeatureFlags instance defined
    evalFlipperT features runWithFeatureFlags

runWithFeatureFlags :: (MonadIO m, HasFeatureFlags m)
                    => m ()
runWithFeatureFlags = do
    whenEnabled
        "SOME_FEATURE"
        (liftIO $ putStrLn "We're running SOME_FEATURE!")

    whenEnabled
        "SOME_OTHER_FEATURE"
        (liftIO $ putStrLn "We're running SOME_OTHER_FEATURE!")

    liftIO $ putStrLn "Done!"

loadFeatures :: IO Features
loadFeatures = do
    -- load feature flags from the environment
    someFeatureEnabled <- maybe False read <$> Env.lookupEnv "SOME_FEATURE"
    someOtherFeatureEnabled <- maybe False read <$> Env.lookupEnv "SOME_OTHER_FEATURE"

    -- build flipper feature type
    pure . Features $ Map.fromList
        [ ("SOME_FEATURE", someFeatureEnabled)
        , ("SOME_OTHER_FEATURE", someOtherFeatureEnabled)
        ]