{-# LANGUAGE TemplateHaskell #-}

-- | <http://strava.github.io/api/v3/oauth/>
module Strive.Types.Authentication
  ( TokenExchangeResponse (..),
    DeauthorizationResponse (..),
  )
where

import Data.Aeson.TH (deriveFromJSON)
import Data.Text (Text)
import Strive.Internal.TH (options)
import Strive.Types.Athletes (AthleteSummary)

-- | <http://strava.github.io/api/v3/oauth/#example-response>
data TokenExchangeResponse = TokenExchangeResponse
  { TokenExchangeResponse -> Text
tokenExchangeResponse_accessToken :: Text,
    TokenExchangeResponse -> AthleteSummary
tokenExchangeResponse_athlete :: AthleteSummary
  }
  deriving (Int -> TokenExchangeResponse -> ShowS
[TokenExchangeResponse] -> ShowS
TokenExchangeResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TokenExchangeResponse] -> ShowS
$cshowList :: [TokenExchangeResponse] -> ShowS
show :: TokenExchangeResponse -> String
$cshow :: TokenExchangeResponse -> String
showsPrec :: Int -> TokenExchangeResponse -> ShowS
$cshowsPrec :: Int -> TokenExchangeResponse -> ShowS
Show)

$(deriveFromJSON options ''TokenExchangeResponse)

-- | <http://strava.github.io/api/v3/oauth/#example-response-1>
newtype DeauthorizationResponse = DeauthorizationResponse
  { DeauthorizationResponse -> Text
deauthorizationResponse_accessToken :: Text
  }
  deriving (Int -> DeauthorizationResponse -> ShowS
[DeauthorizationResponse] -> ShowS
DeauthorizationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeauthorizationResponse] -> ShowS
$cshowList :: [DeauthorizationResponse] -> ShowS
show :: DeauthorizationResponse -> String
$cshow :: DeauthorizationResponse -> String
showsPrec :: Int -> DeauthorizationResponse -> ShowS
$cshowsPrec :: Int -> DeauthorizationResponse -> ShowS
Show)

$(deriveFromJSON options ''DeauthorizationResponse)