-- | 'Strive.Actions.Streams'
module Strive.Options.Streams
  ( GetStreamsOptions (..),
  )
where

import Data.Default (Default, def)
import Network.HTTP.Types (QueryLike, toQuery)
import Strive.Enums (Resolution, SeriesType (Distance))

-- | 'Strive.Actions.getStreams'
data GetStreamsOptions = GetStreamsOptions
  { GetStreamsOptions -> Maybe Resolution
getStreamsOptions_resolution :: Maybe Resolution,
    GetStreamsOptions -> SeriesType
getStreamsOptions_seriesType :: SeriesType
  }
  deriving (Int -> GetStreamsOptions -> ShowS
[GetStreamsOptions] -> ShowS
GetStreamsOptions -> String
(Int -> GetStreamsOptions -> ShowS)
-> (GetStreamsOptions -> String)
-> ([GetStreamsOptions] -> ShowS)
-> Show GetStreamsOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetStreamsOptions -> ShowS
showsPrec :: Int -> GetStreamsOptions -> ShowS
$cshow :: GetStreamsOptions -> String
show :: GetStreamsOptions -> String
$cshowList :: [GetStreamsOptions] -> ShowS
showList :: [GetStreamsOptions] -> ShowS
Show)

instance Default GetStreamsOptions where
  def :: GetStreamsOptions
def =
    GetStreamsOptions
      { getStreamsOptions_resolution :: Maybe Resolution
getStreamsOptions_resolution = Maybe Resolution
forall a. Maybe a
Nothing,
        getStreamsOptions_seriesType :: SeriesType
getStreamsOptions_seriesType = SeriesType
Distance
      }

instance QueryLike GetStreamsOptions where
  toQuery :: GetStreamsOptions -> Query
toQuery GetStreamsOptions
options =
    [(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
      [ (String
"resolution", (Resolution -> String) -> Maybe Resolution -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Resolution -> String
forall a. Show a => a -> String
show (GetStreamsOptions -> Maybe Resolution
getStreamsOptions_resolution GetStreamsOptions
options)),
        (String
"series_type", String -> Maybe String
forall a. a -> Maybe a
Just (SeriesType -> String
forall a. Show a => a -> String
show (GetStreamsOptions -> SeriesType
getStreamsOptions_seriesType GetStreamsOptions
options)))
      ]