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
  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
.~ Name -> [Name] -> Name -> [DefName]
underscoreNoPrefixNamer

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