{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} module ACMS.API.REST.Collection.Paginated where import ACMS.API.REST (APIMonad, fetch, restRequest) import Collection import Data.Aeson qualified as A import Data.Function ((&)) import GHC.Generics (Generic) import Text.Printf (printf) data Pagination = Pagination { limit :: Int, offset :: Int } data Paginated a = Paginated { count :: Int, data_ :: [a] } deriving (Eq, Show, Generic) instance (A.FromJSON a) => A.FromJSON (Paginated a) instance (A.ToJSON a) => A.ToJSON (Paginated a) list :: (APIMonad m) => Pagination -> Collection -> m (Paginated A.Object) list p c = restRequest (printf "/collection/%s/paginated/%d/%d" c.name p.limit p.offset) & fetch >>= A.throwDecode