packages feed

slack-web-1.5.0.0: src/Web/Slack/Pager/Types.hs

{-# LANGUAGE TemplateHaskell #-}

module Web.Slack.Pager.Types where

import Web.Slack.Prelude
import Web.Slack.Util

newtype Cursor = Cursor {unCursor :: Text}
  deriving stock (Eq, Generic, Show)
  deriving newtype (NFData, Hashable, FromJSON, ToJSON, ToHttpApiData)

newtype ResponseMetadata = ResponseMetadata {responseMetadataNextCursor :: Maybe Cursor}
  deriving stock (Eq, Show, Generic)

instance NFData ResponseMetadata

$(deriveJSON (jsonOpts "responseMetadata") ''ResponseMetadata)

class PagedRequest a where
  setCursor :: Maybe Cursor -> a -> a

class PagedResponse a where
  type ResponseObject a
  getResponseMetadata :: a -> Maybe ResponseMetadata
  getResponseData :: a -> [ResponseObject a]