4r/4r-api/Api.hs

27 lines
929 B
Haskell

module Api (getSections, getSections', getTopics, getTopics', getTopic, getTopic') where
import Relude
import Polysemy (Members, Sem)
import Polysemy.Error (Error)
import Servant.API
import Servant.Client.Streaming (ClientError, ClientM, client)
import Servant.Polysemy.Client (ServantClient, runClient)
import Api.Spec
import Api.Types
getSections' :: GetSections -> ClientM [Section]
getTopics' :: GetTopics -> ClientM [TopicInfo]
getTopic' :: GetTopic -> ClientM Topic
getSections' :<|> getTopics' :<|> getTopic' = client (Proxy @Api)
getSections :: Members '[ServantClient, Error ClientError] r => Sem r [Section]
getSections = runClient $ getSections' GetSections
getTopics :: Members '[ServantClient, Error ClientError] r => Sem r [TopicInfo]
getTopics = runClient $ getTopics' GetTopics
getTopic :: Members '[ServantClient, Error ClientError] r => Integer -> Sem r Topic
getTopic = runClient . getTopic' . GetTopic