{-# LANGUAGE TemplateHaskell #-}

-- | <http://strava.github.io/api/v3/gear/>
module Strive.Types.Gear
  ( GearDetailed (..)
  , GearSummary (..)
  ) where

import Data.Aeson.TH (deriveFromJSON)
import Data.Text (Text)
import Strive.Enums (FrameType, ResourceState)
import Strive.Internal.TH (options)

-- | <http://strava.github.io/api/v3/gear/#detailed>
data GearDetailed = GearDetailed
  { GearDetailed -> Text
gearDetailed_brandName     :: Text
  , GearDetailed -> Text
gearDetailed_description   :: Text
  , GearDetailed -> Double
gearDetailed_distance      :: Double
  , GearDetailed -> Maybe FrameType
gearDetailed_frameType     :: Maybe FrameType
  , GearDetailed -> Text
gearDetailed_id            :: Text
  , GearDetailed -> Text
gearDetailed_modelName     :: Text
  , GearDetailed -> Text
gearDetailed_name          :: Text
  , GearDetailed -> Bool
gearDetailed_primary       :: Bool
  , GearDetailed -> ResourceState
gearDetailed_resourceState :: ResourceState
  } deriving Int -> GearDetailed -> ShowS
[GearDetailed] -> ShowS
GearDetailed -> String
(Int -> GearDetailed -> ShowS)
-> (GearDetailed -> String)
-> ([GearDetailed] -> ShowS)
-> Show GearDetailed
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GearDetailed] -> ShowS
$cshowList :: [GearDetailed] -> ShowS
show :: GearDetailed -> String
$cshow :: GearDetailed -> String
showsPrec :: Int -> GearDetailed -> ShowS
$cshowsPrec :: Int -> GearDetailed -> ShowS
Show

$(deriveFromJSON options ''GearDetailed)

-- | <http://strava.github.io/api/v3/gear/#summary>
data GearSummary = GearSummary
  { GearSummary -> Double
gearSummary_distance      :: Double
  , GearSummary -> Text
gearSummary_id            :: Text
  , GearSummary -> Text
gearSummary_name          :: Text
  , GearSummary -> Bool
gearSummary_primary       :: Bool
  , GearSummary -> ResourceState
gearSummary_resourceState :: ResourceState
  } deriving Int -> GearSummary -> ShowS
[GearSummary] -> ShowS
GearSummary -> String
(Int -> GearSummary -> ShowS)
-> (GearSummary -> String)
-> ([GearSummary] -> ShowS)
-> Show GearSummary
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GearSummary] -> ShowS
$cshowList :: [GearSummary] -> ShowS
show :: GearSummary -> String
$cshow :: GearSummary -> String
showsPrec :: Int -> GearSummary -> ShowS
$cshowsPrec :: Int -> GearSummary -> ShowS
Show

$(deriveFromJSON options ''GearSummary)