{-# LANGUAGE OverloadedStrings #-}
module Strive.Types.Efforts
( EffortDetailed (..)
) where
import Control.Applicative (empty)
import Data.Aeson (FromJSON, Value (Object), parseJSON, (.:), (.:?))
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import Strive.Enums (ResourceState)
import Strive.Types.Segments (SegmentSummary)
data EffortDetailed = EffortDetailed
{ effortDetailed_activityId :: Integer
, effortDetailed_athleteId :: Integer
, effortDetailed_averageCadence :: Maybe Double
, effortDetailed_averageHeartrate :: Maybe Double
, effortDetailed_averageWatts :: Maybe Double
, effortDetailed_distance :: Double
, effortDetailed_elapsedTime :: Integer
, effortDetailed_endIndex :: Integer
, effortDetailed_hidden :: Maybe Bool
, effortDetailed_id :: Integer
, effortDetailed_komRank :: Maybe Integer
, effortDetailed_maxHeartrate :: Maybe Integer
, effortDetailed_movingTime :: Integer
, effortDetailed_name :: Text
, effortDetailed_prRank :: Maybe Integer
, effortDetailed_resourceState :: ResourceState
, effortDetailed_segment :: SegmentSummary
, effortDetailed_startDate :: UTCTime
, effortDetailed_startDateLocal :: UTCTime
, effortDetailed_startIndex :: Integer
} deriving Show
instance FromJSON EffortDetailed where
parseJSON (Object o) = EffortDetailed
<$> ((o .: "activity") >>= (.: "id"))
<*> ((o .: "athlete") >>= (.: "id"))
<*> o .:? "average_cadence"
<*> o .:? "average_heartrate"
<*> o .:? "average_watts"
<*> o .: "distance"
<*> o .: "elapsed_time"
<*> o .: "end_index"
<*> o .:? "hidden"
<*> o .: "id"
<*> o .:? "kom_rank"
<*> o .:? "max_heartrate"
<*> o .: "moving_time"
<*> o .: "name"
<*> o .:? "pr_rank"
<*> o .: "resource_state"
<*> o .: "segment"
<*> o .: "start_date"
<*> o .: "start_date_local"
<*> o .: "start_index"
parseJSON _ = empty