module AWS.Lib.Convert
where
import Language.Haskell.TH
import Control.Applicative ((<$>))
import Data.Text (Text)
import AWS.Util
mkConvertFunc :: String -> Name -> [String] -> Q [Dec]
mkConvertFunc fs d strs = runQ $ do
v <- newName "v"
ctrs <- (\(TyConI (DataD [] _ [] x [])) -> map (\(NormalC name []) -> name) x)
<$> reify d
return $
[ SigD (mkName fs) (AppT (AppT ArrowT (ConT ''Text)) (ConT d))
, FunD (mkName fs) [Clause [VarP v] (NormalB
(CaseE (VarE v)
$ (map (\(s,t) -> Match (LitP (StringL s)) (NormalB (ConE t)) []) $ zip strs ctrs)
++ [Match WildP (NormalB (AppE (AppE (VarE 'err) (LitE (StringL $ show d))) (LitE (StringL $ show v)))) []])
) []]
]