module PyF.Internal.Extensions
  ( thExtToMetaExt,
  )
where

import qualified Language.Haskell.Exts.Extension as Exts
import qualified Language.Haskell.TH as TH

-- | Associate a template haskell extension to an haskell-src-ext extension
thExtToMetaExt :: TH.Extension -> Maybe Exts.Extension
thExtToMetaExt e = Exts.EnableExtension <$> case e of
  -- For some reason, the casing is different between TH and haskell-src-exts
  TH.Cpp -> Just Exts.CPP
  -- Hope for the best, if haskell-src-ext knows the extension or not
  _ -> case Exts.parseExtension (show e) of
    Exts.EnableExtension ext -> Just ext
    Exts.DisableExtension ext -> Just ext
    Exts.UnknownExtension _ -> Nothing