-- | 'Strive.Actions.Comments'
module Strive.Options.Comments
  ( GetActivityCommentsOptions(..)
  ) where

import Data.Aeson (encode)
import Data.ByteString.Char8 (unpack)
import Data.ByteString.Lazy (toStrict)
import Data.Default (Default, def)
import Network.HTTP.Types (QueryLike, toQuery)

-- | 'Strive.Actions.getActivityComments'
data GetActivityCommentsOptions = GetActivityCommentsOptions
  { GetActivityCommentsOptions -> Bool
getActivityCommentsOptions_markdown :: Bool
  , GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_page :: Integer
  , GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_perPage :: Integer
  }
  deriving Int -> GetActivityCommentsOptions -> ShowS
[GetActivityCommentsOptions] -> ShowS
GetActivityCommentsOptions -> String
(Int -> GetActivityCommentsOptions -> ShowS)
-> (GetActivityCommentsOptions -> String)
-> ([GetActivityCommentsOptions] -> ShowS)
-> Show GetActivityCommentsOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetActivityCommentsOptions] -> ShowS
$cshowList :: [GetActivityCommentsOptions] -> ShowS
show :: GetActivityCommentsOptions -> String
$cshow :: GetActivityCommentsOptions -> String
showsPrec :: Int -> GetActivityCommentsOptions -> ShowS
$cshowsPrec :: Int -> GetActivityCommentsOptions -> ShowS
Show

instance Default GetActivityCommentsOptions where
  def :: GetActivityCommentsOptions
def = GetActivityCommentsOptions :: Bool -> Integer -> Integer -> GetActivityCommentsOptions
GetActivityCommentsOptions
    { getActivityCommentsOptions_markdown :: Bool
getActivityCommentsOptions_markdown = Bool
False
    , getActivityCommentsOptions_page :: Integer
getActivityCommentsOptions_page = Integer
1
    , getActivityCommentsOptions_perPage :: Integer
getActivityCommentsOptions_perPage = Integer
200
    }

instance QueryLike GetActivityCommentsOptions where
  toQuery :: GetActivityCommentsOptions -> Query
toQuery GetActivityCommentsOptions
options = [(String, String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
    [ ( String
"before"
      , ByteString -> String
unpack
        (ByteString -> ByteString
toStrict (Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode (GetActivityCommentsOptions -> Bool
getActivityCommentsOptions_markdown GetActivityCommentsOptions
options)))
      )
    , (String
"page", Integer -> String
forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_page GetActivityCommentsOptions
options))
    , (String
"per_page", Integer -> String
forall a. Show a => a -> String
show (GetActivityCommentsOptions -> Integer
getActivityCommentsOptions_perPage GetActivityCommentsOptions
options))
    ]