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
