conferer-0.1.0.1: src/Conferer/Provider/Namespaced.hs
module Conferer.Provider.Namespaced
(
-- * Namespaced higher-order provider
-- | This provider takes a provider and returns a new provider that
-- always checks that the 'Key' given always starts with certain 'Key'
-- and then strips that prefix before consulting its inner Provider
mkNamespacedProvider
) where
import Data.List (stripPrefix)
import Conferer.Types
-- | Create a 'ProviderCreator' from a prefix and another 'ProviderCreator'
mkNamespacedProvider :: Key -> ProviderCreator -> ProviderCreator
mkNamespacedProvider (Path key) configCreator = \config -> do
configProvider <- configCreator config
return $ Provider
{ getKeyInProvider = \(Path k) -> do
case stripPrefix key k of
Just newKey -> getKeyInProvider configProvider (Path newKey)
Nothing -> return Nothing
}