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