{-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} -- | module Strive.Types.Activities ( ActivityDetailed (..) , ActivitySummary (..) , ActivityZoneDetailed (..) , ActivityZoneDistributionBucket (..) , ActivityLapSummary (..) ) where import Data.Aeson (FromJSON, Value (Object), parseJSON, (.:)) import Data.Aeson.TH (deriveFromJSON) import Data.Text (Text) import Data.Time.Clock (UTCTime) import Strive.Enums (ActivityType, ActivityZoneType, ResourceState) import Strive.Internal.TH (options) import Strive.Types.Athletes (AthleteMeta) import Strive.Types.Efforts (EffortDetailed) import Strive.Types.Gear (GearSummary) import Strive.Types.Polylines (PolylineDetailed, PolylineSummary) -- https://ghc.haskell.org/trac/ghc/wiki/Migration/7.10#GHCsaysTheimportof...isredundant import Control.Applicative import Prelude -- | data ActivityDetailed = ActivityDetailed { activityDetailed_achievementCount :: Integer , activityDetailed_athlete :: AthleteMeta , activityDetailed_athleteCount :: Integer , activityDetailed_averageSpeed :: Double , activityDetailed_averageWatts :: Maybe Double , activityDetailed_averageHeartrate :: Maybe Double , activityDetailed_calories :: Double , activityDetailed_commentCount :: Integer , activityDetailed_commute :: Bool , activityDetailed_description :: Maybe Text , activityDetailed_deviceWatts :: Maybe Bool , activityDetailed_distance :: Double , activityDetailed_elapsedTime :: Integer , activityDetailed_endLatlng :: Maybe (Double, Double) , activityDetailed_externalId :: Maybe Text , activityDetailed_flagged :: Bool , activityDetailed_gear :: GearSummary , activityDetailed_gearId :: Maybe Text , activityDetailed_hasKudoed :: Bool , activityDetailed_id :: Integer , activityDetailed_instagramPrimaryPhoto :: Maybe Text , activityDetailed_kilojoules :: Maybe Double , activityDetailed_locationCity :: Maybe Text , activityDetailed_locationCountry :: Maybe Text , activityDetailed_locationState :: Maybe Text , activityDetailed_manual :: Bool , activityDetailed_map :: PolylineDetailed , activityDetailed_maxHeartrate :: Maybe Double , activityDetailed_maxSpeed :: Double , activityDetailed_movingTime :: Integer , activityDetailed_name :: Text , activityDetailed_photoCount :: Integer , activityDetailed_private :: Bool , activityDetailed_resourceState :: ResourceState , activityDetailed_segmentEfforts :: [EffortDetailed] , activityDetailed_startDate :: UTCTime , activityDetailed_startDateLocal :: UTCTime , activityDetailed_startLatitude :: Double , activityDetailed_startLatlng :: Maybe (Double, Double) , activityDetailed_startLongitude :: Double , activityDetailed_timezone :: Text , activityDetailed_totalElevationGain :: Double , activityDetailed_trainer :: Bool , activityDetailed_truncated :: Integer , activityDetailed_type :: ActivityType , activityDetailed_uploadId :: Maybe Integer , activityDetailed_weightedAverageWatts :: Maybe Integer } deriving Show $(deriveFromJSON options ''ActivityDetailed) -- | data ActivitySummary = ActivitySummary { activitySummary_achievementCount :: Integer , activitySummary_athlete :: AthleteMeta , activitySummary_athleteCount :: Integer , activitySummary_averageSpeed :: Double , activitySummary_averageWatts :: Maybe Double , activitySummary_averageHeartrate :: Maybe Double , activitySummary_commentCount :: Integer , activitySummary_commute :: Bool , activitySummary_deviceWatts :: Maybe Bool , activitySummary_distance :: Double , activitySummary_elapsedTime :: Integer , activitySummary_endLatlng :: Maybe (Double, Double) , activitySummary_externalId :: Maybe Text , activitySummary_flagged :: Bool , activitySummary_gearId :: Maybe Text , activitySummary_hasKudoed :: Bool , activitySummary_id :: Integer , activitySummary_kilojoules :: Maybe Double , activitySummary_kudosCount :: Integer , activitySummary_locationCity :: Maybe Text , activitySummary_locationCountry :: Maybe Text , activitySummary_locationState :: Maybe Text , activitySummary_manual :: Bool , activitySummary_map :: PolylineSummary , activitySummary_maxHeartrate :: Maybe Double , activitySummary_maxSpeed :: Double , activitySummary_movingTime :: Integer , activitySummary_name :: Text , activitySummary_photoCount :: Integer , activitySummary_private :: Bool , activitySummary_resourceState :: ResourceState , activitySummary_startDate :: UTCTime , activitySummary_startDateLocal :: UTCTime , activitySummary_startLatitude :: Double , activitySummary_startLatlng :: Maybe (Double, Double) , activitySummary_startLongitude :: Double , activitySummary_timezone :: Text , activitySummary_totalElevationGain :: Double , activitySummary_trainer :: Bool , activitySummary_type :: ActivityType , activitySummary_uploadId :: Maybe Integer , activitySummary_weightedAverageWatts :: Maybe Integer } deriving Show $(deriveFromJSON options ''ActivitySummary) -- | data ActivityZoneDistributionBucket = ActivityZoneDistributionBucket { activityZoneDistributionBucket_max :: Integer , activityZoneDistributionBucket_min :: Integer , activityZoneDistributionBucket_time :: Integer } deriving Show $(deriveFromJSON options ''ActivityZoneDistributionBucket) -- | data ActivityZoneDetailed = ActivityZoneDetailed { activityZoneDetailed_distributionBuckets :: [ActivityZoneDistributionBucket] , activityZoneDetailed_resourceState :: ResourceState , activityZoneDetailed_sensorBased :: Bool , activityZoneDetailed_type :: ActivityZoneType } deriving Show $(deriveFromJSON options ''ActivityZoneDetailed) -- | data ActivityLapSummary = ActivityLapSummary { activityLapSummary_activityId :: Integer , activityLapSummary_athleteId :: Integer , activityLapSummary_averageSpeed :: Double , activityLapSummary_averageWatts :: Double , activityLapSummary_distance :: Double , activityLapSummary_elapsedTime :: Integer , activityLapSummary_endIndex :: Integer , activityLapSummary_id :: Integer , activityLapSummary_lapIndex :: Integer , activityLapSummary_maxSpeed :: Double , activityLapSummary_movingTime :: Double , activityLapSummary_name :: Text , activityLapSummary_resourceState :: ResourceState , activityLapSummary_startDate :: UTCTime , activityLapSummary_startDateLocal :: UTCTime , activityLapSummary_startIndex :: Integer , activityLapSummary_totalElevationGain :: Double } deriving Show instance FromJSON ActivityLapSummary where parseJSON (Object o) = ActivityLapSummary <$> ((o .: "activity") >>= (.: "id")) <*> ((o .: "athlete") >>= (.: "id")) <*> o .: "average_speed" <*> o .: "average_watts" <*> o .: "distance" <*> o .: "elapsed_time" <*> o .: "end_index" <*> o .: "id" <*> o .: "lap_index" <*> o .: "max_speed" <*> o .: "moving_time" <*> o .: "name" <*> o .: "resource_state" <*> o .: "start_date" <*> o .: "start_date_local" <*> o .: "start_index" <*> o .: "total_elevation_gain" parseJSON _ = empty