blockfrost-api-0.1.0.0: src/Blockfrost/Util/LensRules.hs
-- | Rules for lens generation
{-# OPTIONS_HADDOCK hide #-}
module Blockfrost.Util.LensRules
where
import Control.Lens
import Language.Haskell.TH (mkName, nameBase)
-- Bit of an overkill, since we only alter
-- one field name which would end up called `type`
blockfrostFieldRules :: LensRules
blockfrostFieldRules = defaultFieldRules
& lensField %~ modNamer
where
modNamer namer dname fnames fname =
map fixDefName (namer (fixTypeName dname) fnames fname)
fixDefName (MethodName cname mname)=MethodName cname (fixName mname)
fixDefName (TopName name) = TopName (fixName name)
fixTypeName = mkName . fixTypeName' . nameBase
-- we coerce IPFS (and similar) to Ipfs so
-- camelCase namer is happy
-- and we don't have to rename our type or fields
fixTypeName' "IPFSAdd" = "IpfsAdd"
fixTypeName' "IPFSPinChange" = "IpfsPinChange"
fixTypeName' "IPFSPin" = "IpfsPin"
fixTypeName' "URLVersion" = "UrlVersion"
fixTypeName' x = x
fixName = mkName . fixName' . nameBase
fixName' "type" = "type_"
fixName' n = n