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