{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskellQuotes #-}
module Text.Pandoc.Emoji.TH ( genEmojis ) where
import Prelude
import Data.Aeson
import qualified Data.ByteString.Lazy as B
import Language.Haskell.TH
import Language.Haskell.TH.Syntax (addDependentFile)
genEmojis :: FilePath -> Q Exp
genEmojis fp = do
addDependentFile fp
bs <- runIO $ B.readFile fp
case eitherDecode bs of
Left e -> error e
Right (emoji :: [Emoji]) -> [| emojis |]
where emojis = [ (alias, txt)
| Emoji txt aliases <- emoji
, alias <- aliases
]
data Emoji = Emoji String [String]
deriving Show
instance FromJSON Emoji where
parseJSON = withObject "Emoji" $ \v -> Emoji
<$> v .: "emoji"
<*> v .: "aliases"