module Network.Mattermost.TH where

import qualified Language.Haskell.TH.Syntax as TH
import qualified Language.Haskell.TH.Lib as TH

import Lens.Micro ((&), (.~))
import Lens.Micro.TH (DefName(..), makeLensesWith, lensRules, lensField)

suffixLenses :: TH.Name -> TH.DecsQ
suffixLenses :: Name -> DecsQ
suffixLenses = LensRules -> Name -> DecsQ
makeLensesWith forall a b. (a -> b) -> a -> b
$
  LensRules
lensRules 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
name -> [Name -> DefName
TopName forall a b. (a -> b) -> a -> b
$ String -> Name
TH.mkName forall a b. (a -> b) -> a -> b
$ Name -> String
TH.nameBase Name
name forall a. [a] -> [a] -> [a]
++ String
"L"])