module Test.Sandwich.Types.TestTimer.LensRules (
  testTimerLensRules
  ) where

import Data.Char (toLower, toUpper)
import Language.Haskell.TH
import Lens.Micro
import Lens.Micro.TH


testTimerLensRules :: LensRules
testTimerLensRules :: LensRules
testTimerLensRules = LensRules
camelCaseFields
  forall a b. a -> (a -> b) -> b
& Lens' LensRules (Name -> [Name] -> Name -> [DefName])
lensField forall s t a b. ASetter s t a b -> b -> s -> t
.~ Name -> [Name] -> Name -> [DefName]
underscoreNoPrefixNamer

underscoreNoPrefixNamer :: Name -> [Name] -> Name -> [DefName]
underscoreNoPrefixNamer :: Name -> [Name] -> Name -> [DefName]
underscoreNoPrefixNamer Name
_ [Name]
_ Name
n =
  case Name -> String
nameBase Name
n of
    Char
'_':Char
x:String
xs -> [Name -> Name -> DefName
MethodName (String -> Name
mkName (String
"Has" forall a. [a] -> [a] -> [a]
++ (Char -> Char
toUpper Char
xforall a. a -> [a] -> [a]
:String
xs))) (String -> Name
mkName (Char -> Char
toLower Char
xforall a. a -> [a] -> [a]
:String
xs))]
    String
_        -> []