-- | Common options that apply to many endpoints.
module Strive.Internal.Options
  ( PaginationOptions (..),
  )
where

import Data.Default (Default, def)
import Network.HTTP.Types (QueryLike, toQuery)

-- | Options for paginating.
data PaginationOptions = PaginationOptions
  { PaginationOptions -> Integer
paginationOptions_page :: Integer,
    PaginationOptions -> Integer
paginationOptions_perPage :: Integer
  }
  deriving (Int -> PaginationOptions -> ShowS
[PaginationOptions] -> ShowS
PaginationOptions -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaginationOptions] -> ShowS
$cshowList :: [PaginationOptions] -> ShowS
show :: PaginationOptions -> String
$cshow :: PaginationOptions -> String
showsPrec :: Int -> PaginationOptions -> ShowS
$cshowsPrec :: Int -> PaginationOptions -> ShowS
Show)

instance Default PaginationOptions where
  def :: PaginationOptions
def =
    PaginationOptions
      { paginationOptions_page :: Integer
paginationOptions_page = Integer
1,
        paginationOptions_perPage :: Integer
paginationOptions_perPage = Integer
200
      }

instance QueryLike PaginationOptions where
  toQuery :: PaginationOptions -> Query
toQuery PaginationOptions
options =
    forall a. QueryLike a => a -> Query
toQuery
      [ (String
"page", forall a. Show a => a -> String
show (PaginationOptions -> Integer
paginationOptions_page PaginationOptions
options)),
        (String
"per_page", forall a. Show a => a -> String
show (PaginationOptions -> Integer
paginationOptions_perPage PaginationOptions
options))
      ]