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 defaultRules = LensRules lensRules fieldName :: (String -> String) -> Name -> [Name] -> Name -> [DefName] fieldName :: (String -> String) -> Name -> [Name] -> Name -> [DefName] fieldName String -> String f Name _ [Name] _ Name name = [Name -> DefName TopName (Name -> DefName) -> (Name -> Name) -> Name -> DefName forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> Name mkName (String -> Name) -> (Name -> String) -> Name -> Name forall b c a. (b -> c) -> (a -> b) -> a -> c . String -> String f (String -> String) -> (Name -> String) -> Name -> String forall b c a. (b -> c) -> (a -> b) -> a -> c . Name -> String nameBase (Name -> DefName) -> Name -> DefName forall a b. (a -> b) -> a -> b $ Name name] makeLenses :: Name -> Q [Dec] makeLenses :: Name -> Q [Dec] makeLenses = LensRules -> Name -> Q [Dec] makeLensesWith (LensRules defaultRules LensRules -> (LensRules -> LensRules) -> LensRules forall a b. a -> (a -> b) -> b & ((Name -> [Name] -> Name -> [DefName]) -> Identity (Name -> [Name] -> Name -> [DefName])) -> LensRules -> Identity LensRules Lens' LensRules (Name -> [Name] -> Name -> [DefName]) lensField (((Name -> [Name] -> Name -> [DefName]) -> Identity (Name -> [Name] -> Name -> [DefName])) -> LensRules -> Identity LensRules) -> (Name -> [Name] -> Name -> [DefName]) -> LensRules -> LensRules forall s t a b. ASetter s t a b -> b -> s -> t .~ (String -> String) -> Name -> [Name] -> Name -> [DefName] fieldName String -> String forall a. a -> a id) toCamelCase :: String -> String toCamelCase :: String -> String toCamelCase (Char x0:String x0s) = Char x0 Char -> String -> String forall a. a -> [a] -> [a] : String -> String go String x0s where go :: String -> String go (Char '_':Char x:String xs) = Char -> Char toUpper Char x Char -> String -> String forall a. a -> [a] -> [a] : String -> String go String xs go (Char x:String xs) = Char x Char -> String -> String forall a. a -> [a] -> [a] : String -> String go String xs go [] = [] toCamelCase [] = []