module Reddit.Types.Options where

import Data.Default.Class

data PaginationOption a = Before a
                        | After a
  deriving (Int -> PaginationOption a -> ShowS
[PaginationOption a] -> ShowS
PaginationOption a -> String
(Int -> PaginationOption a -> ShowS)
-> (PaginationOption a -> String)
-> ([PaginationOption a] -> ShowS)
-> Show (PaginationOption a)
forall a. Show a => Int -> PaginationOption a -> ShowS
forall a. Show a => [PaginationOption a] -> ShowS
forall a. Show a => PaginationOption a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PaginationOption a] -> ShowS
$cshowList :: forall a. Show a => [PaginationOption a] -> ShowS
show :: PaginationOption a -> String
$cshow :: forall a. Show a => PaginationOption a -> String
showsPrec :: Int -> PaginationOption a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> PaginationOption a -> ShowS
Show, ReadPrec [PaginationOption a]
ReadPrec (PaginationOption a)
Int -> ReadS (PaginationOption a)
ReadS [PaginationOption a]
(Int -> ReadS (PaginationOption a))
-> ReadS [PaginationOption a]
-> ReadPrec (PaginationOption a)
-> ReadPrec [PaginationOption a]
-> Read (PaginationOption a)
forall a. Read a => ReadPrec [PaginationOption a]
forall a. Read a => ReadPrec (PaginationOption a)
forall a. Read a => Int -> ReadS (PaginationOption a)
forall a. Read a => ReadS [PaginationOption a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PaginationOption a]
$creadListPrec :: forall a. Read a => ReadPrec [PaginationOption a]
readPrec :: ReadPrec (PaginationOption a)
$creadPrec :: forall a. Read a => ReadPrec (PaginationOption a)
readList :: ReadS [PaginationOption a]
$creadList :: forall a. Read a => ReadS [PaginationOption a]
readsPrec :: Int -> ReadS (PaginationOption a)
$creadsPrec :: forall a. Read a => Int -> ReadS (PaginationOption a)
Read, PaginationOption a -> PaginationOption a -> Bool
(PaginationOption a -> PaginationOption a -> Bool)
-> (PaginationOption a -> PaginationOption a -> Bool)
-> Eq (PaginationOption a)
forall a. Eq a => PaginationOption a -> PaginationOption a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PaginationOption a -> PaginationOption a -> Bool
$c/= :: forall a. Eq a => PaginationOption a -> PaginationOption a -> Bool
== :: PaginationOption a -> PaginationOption a -> Bool
$c== :: forall a. Eq a => PaginationOption a -> PaginationOption a -> Bool
Eq)

data Options a = Options { Options a -> Maybe (PaginationOption a)
pagination :: Maybe (PaginationOption a)
                         , Options a -> Maybe Int
limit :: Maybe Int }
  deriving (Int -> Options a -> ShowS
[Options a] -> ShowS
Options a -> String
(Int -> Options a -> ShowS)
-> (Options a -> String)
-> ([Options a] -> ShowS)
-> Show (Options a)
forall a. Show a => Int -> Options a -> ShowS
forall a. Show a => [Options a] -> ShowS
forall a. Show a => Options a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Options a] -> ShowS
$cshowList :: forall a. Show a => [Options a] -> ShowS
show :: Options a -> String
$cshow :: forall a. Show a => Options a -> String
showsPrec :: Int -> Options a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Options a -> ShowS
Show, ReadPrec [Options a]
ReadPrec (Options a)
Int -> ReadS (Options a)
ReadS [Options a]
(Int -> ReadS (Options a))
-> ReadS [Options a]
-> ReadPrec (Options a)
-> ReadPrec [Options a]
-> Read (Options a)
forall a. Read a => ReadPrec [Options a]
forall a. Read a => ReadPrec (Options a)
forall a. Read a => Int -> ReadS (Options a)
forall a. Read a => ReadS [Options a]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [Options a]
$creadListPrec :: forall a. Read a => ReadPrec [Options a]
readPrec :: ReadPrec (Options a)
$creadPrec :: forall a. Read a => ReadPrec (Options a)
readList :: ReadS [Options a]
$creadList :: forall a. Read a => ReadS [Options a]
readsPrec :: Int -> ReadS (Options a)
$creadsPrec :: forall a. Read a => Int -> ReadS (Options a)
Read, Options a -> Options a -> Bool
(Options a -> Options a -> Bool)
-> (Options a -> Options a -> Bool) -> Eq (Options a)
forall a. Eq a => Options a -> Options a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Options a -> Options a -> Bool
$c/= :: forall a. Eq a => Options a -> Options a -> Bool
== :: Options a -> Options a -> Bool
$c== :: forall a. Eq a => Options a -> Options a -> Bool
Eq)

before :: Options a -> Maybe a
before :: Options a -> Maybe a
before (Options (Just (Before a
a)) Maybe Int
_) = a -> Maybe a
forall a. a -> Maybe a
Just a
a
before Options a
_ = Maybe a
forall a. Maybe a
Nothing

after :: Options a -> Maybe a
after :: Options a -> Maybe a
after (Options (Just (After a
a)) Maybe Int
_) = a -> Maybe a
forall a. a -> Maybe a
Just a
a
after Options a
_ = Maybe a
forall a. Maybe a
Nothing

instance Default (Options a) where
  def :: Options a
def = Maybe (PaginationOption a) -> Maybe Int -> Options a
forall a. Maybe (PaginationOption a) -> Maybe Int -> Options a
Options Maybe (PaginationOption a)
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing