api-tools-0.5: src/Data/API/Tools/Lens.hs
{-# LANGUAGE TemplateHaskell #-}
module Data.API.Tools.Lens
( lensTool
, binary
) where
import Data.API.Tools.Combinators
import Data.API.Tools.Datatypes
import Data.API.Types
import Control.Lens
-- | Tool to make lenses for fields in generated types.
lensTool :: APITool
lensTool = apiDataTypeTool $ mkTool $ \ ts an ->
if ok ts an then makeLenses $ rep_type_nm an else return []
where
-- Exclude newtypes if we are using smart constructors, because
-- the lens can be used to bypass the invariant
ok ts an | SpNewtype (SpecNewtype _ (Just _)) <- anSpec an = not (newtypeSmartConstructors ts)
| otherwise = True
$(makeLenses ''Binary)