{-# LANGUAGE OverloadedStrings #-} module Snap.Utilities.Configuration.Keys ( keyPre, rebaseKey, groupName ) where import qualified Data.Configurator as C import qualified Data.Configurator.Types as CT import Data.List (groupBy, intercalate, find, sortBy) import Data.HashMap.Strict (toList) import Data.Text (Text, isPrefixOf, splitOn, pack, unpack) import Snap.Utilities.Configuration.Types ------------------------------------------------------------------------------ -- | Get the prefix for a AuthDomain key. keyPre :: Text -> [Text] keyPre k = take l $ splitK k where l = length (splitK k) - 1 -- | Reduce an AuthDomain key down to its last element. rebaseKey :: ConfigPair -> ConfigPair rebaseKey (k, v) = (head . drop l . splitK $ k, v) where l = length (splitK k) - 1 -- | Get a name for a group of items. -- Has to drop 1 because the first item is always the type of group. groupName :: [ConfigPair] -> String groupName = unpack . head . drop 1 . keyPre . fst . head -- | Splits a Configurator key up by dot delimiter. splitK :: Text -> [Text] splitK = splitOn "."