4r/app/Api.hs

27 lines
857 B
Haskell

module Api where
import Relude
import Polysemy (Members, Sem)
import Polysemy.Error (Error)
import Servant.API
import Servant.Client.Streaming (ClientM, ClientError, client)
import Servant.Polysemy.Client (runClient, ServantClient)
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