module Conferer.Provider.Mapping where

import           Data.Map (Map)
import qualified Data.Map as Map

import           Conferer.Types

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
    }

mkMappingProvider :: Map Key Key -> ProviderCreator -> ProviderCreator
mkMappingProvider configMap configProvider =
  mkMappingProvider' (`Map.lookup` configMap) configProvider