{-# 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
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
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)