{-# 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
(Int -> TokenExchangeResponse -> ShowS)
-> (TokenExchangeResponse -> String)
-> ([TokenExchangeResponse] -> ShowS)
-> Show TokenExchangeResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TokenExchangeResponse -> ShowS
showsPrec :: Int -> TokenExchangeResponse -> ShowS
$cshow :: TokenExchangeResponse -> String
show :: TokenExchangeResponse -> String
$cshowList :: [TokenExchangeResponse] -> ShowS
showList :: [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
(Int -> DeauthorizationResponse -> ShowS)
-> (DeauthorizationResponse -> String)
-> ([DeauthorizationResponse] -> ShowS)
-> Show DeauthorizationResponse
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> DeauthorizationResponse -> ShowS
showsPrec :: Int -> DeauthorizationResponse -> ShowS
$cshow :: DeauthorizationResponse -> String
show :: DeauthorizationResponse -> String
$cshowList :: [DeauthorizationResponse] -> ShowS
showList :: [DeauthorizationResponse] -> ShowS
Show)

$(deriveFromJSON options ''DeauthorizationResponse)