module Api (getSections, getTopics, getTopic) 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