module Aws.Lambda.Meta.Common
( declarationName
, expressionName
, getFieldsFrom
, constructorName
) where
import Data.Text (Text)
import qualified Data.Text as Text
import Language.Haskell.TH
declarationName :: Text -> Q Pat
declarationName = pure . VarP . mkName . Text.unpack
expressionName :: Text -> Q Exp
expressionName = pure . VarE . mkName . Text.unpack
constructorName :: Text -> Q Exp
constructorName = pure . ConE . mkName . Text.unpack
getFieldsFrom :: Text -> [Text] -> Q Pat
getFieldsFrom name fields = do
extractedFields <- traverse extractField fields
pure $ RecP (mkName $ Text.unpack name) extractedFields
where
extractField :: Text -> Q FieldPat
extractField n = pure (mkName $ Text.unpack n, VarP $ mkName $ Text.unpack n)