1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
module Network.Wreq.Lens.Machinery
(
makeLenses
, fieldName
, toCamelCase
) where
import Control.Lens ((&), (.~))
import Control.Lens.TH hiding (makeLenses)
import Data.Char (toUpper)
import Language.Haskell.TH.Syntax (Dec, Name, Q, mkName, nameBase)
defaultRules :: LensRules
defaultRules = lensRules
fieldName :: (String -> String) -> Name -> [Name] -> Name -> [DefName]
fieldName f _ _ name = [TopName . mkName . f . nameBase $ name]
makeLenses :: Name -> Q [Dec]
makeLenses = makeLensesWith (defaultRules & lensField .~ fieldName id)
toCamelCase :: String -> String
toCamelCase (x0:x0s) = x0 : go x0s
where go ('_':x:xs) = toUpper x : go xs
go (x:xs) = x : go xs
go [] = []
toCamelCase [] = []
|