conferer-0.1.0.1: src/Conferer/Provider/Mapping.hs
module Conferer.Provider.Mapping
(
-- * Namespaced higher-order provider
-- | This provider takes a provider and returns a new provider that
-- always transforms the key according to either a function for
-- 'mkMappingProvider'' or a 'Map' for 'mkMappingProvider'
mkMappingProvider
, mkMappingProvider'
)
where
import Data.Map (Map)
import qualified Data.Map as Map
import Conferer.Types
-- | Create a 'ProviderCreator' using a function to transform the supplied keys
-- and another 'ProviderCreator'
mkMappingProvider' :: (Key -> Maybe Key) -> ProviderCreator -> ProviderCreator
mkMappingProvider' mapper providerCreator config = do
configProvider <- providerCreator config
return $ Provider
{ getKeyInProvider = \k -> do
case mapper k of
Just newKey -> getKeyInProvider configProvider newKey
Nothing -> return Nothing
}
-- | Create a 'ProviderCreator' using a 'Map' 'Key' 'Key' to transform the supplied keys
-- and another 'ProviderCreator'
mkMappingProvider :: Map Key Key -> ProviderCreator -> ProviderCreator
mkMappingProvider configMap configProvider =
mkMappingProvider' (`Map.lookup` configMap) configProvider