{-|
Module: BattlePlace.Token.Types
Description: Token types.
License: MIT
-}

{-# LANGUAGE DeriveGeneric, GeneralizedNewtypeDeriving #-}

module BattlePlace.Token.Types
  ( InternalToken(..)
  , Ticket(..)
  ) where

import qualified Data.Aeson as J
import qualified Data.Swagger as SW
import qualified Data.Text as T
import GHC.Generics(Generic)
import Servant.API

import BattlePlace.Util

-- | Internal token.
-- Token is encrypted, and contains some internal information.
newtype InternalToken a = InternalToken T.Text deriving (Generic, J.FromJSON, J.ToJSON, FromHttpApiData, ToHttpApiData)
instance SW.ToSchema (InternalToken a) where
  declareNamedSchema = SW.genericDeclareNamedSchemaNewtype swaggerSchemaOptions SW.declareSchema
instance SW.ToParamSchema (InternalToken a)

-- | Ticket.
-- Ticket doesn't contain information, it's just an ID.
newtype Ticket = Ticket T.Text deriving (Generic, J.FromJSON, J.ToJSON)
instance SW.ToSchema Ticket where
  declareNamedSchema = SW.genericDeclareNamedSchemaNewtype swaggerSchemaOptions SW.declareSchema