{- HUGOConvert
Gregory W. Schwartz
Collections the functions pertaining to converting certain annotations into
other annotations using the HUGO database.
-}
{-# LANGUAGE OverloadedStrings #-}
module HUGOConvert
( toHUGOAnn
) where
-- Standard
import Data.Monoid
import Control.Exception (throwIO)
-- Cabal
import qualified Data.Text as T
import Data.Aeson
import Data.Aeson.Lens
import Control.Lens
import Network.HTTP.Req
import Safe
-- Local
import Types
instance MonadHttp IO where
handleHttpException = throwIO
-- | Get the HUGO annotation.
toHUGOAnn :: HUGOType -> UnknownAnn -> IO (Maybe Ann)
toHUGOAnn _ (UnknownAnn "") = return Nothing
toHUGOAnn (HUGOType queryType) (UnknownAnn query) = do
let opts = header "Accept" "application/json"
r <- req GET
(http "rest.genenames.org" /: "search" /: queryType /: query)
NoReqBody
jsonResponse
opts
let getSymbols = key "response"
. key "docs"
. _Array
. traverse
. key "symbol"
. _String
return . fmap Ann . headMay . toListOf getSymbols $ (responseBody r :: Value)