{-| Module : Types.GreatPower Description : Wrapper for Diplomacy.GreatPower to make it JSON-able Copyright : (c) Alexander Vieth, 2015 Licence : BSD3 Maintainer : aovieth@gmail.com Stability : experimental Portability : non-portable (GHC only) -} {-# LANGUAGE AutoDeriveTypeable #-} {-# LANGUAGE DeriveGeneric #-} module Types.GreatPower ( GreatPower(..) , outGreatPower ) where import GHC.Generics import Control.Applicative import Data.String (fromString) import Data.Typeable import qualified Data.Text as T import Data.Aeson import Data.JSON.Schema import qualified Diplomacy.GreatPower as D newtype GreatPower = GreatPower D.GreatPower deriving (Eq, Ord, Show, Generic, Typeable) outGreatPower :: GreatPower -> D.GreatPower outGreatPower (GreatPower x) = x instance ToJSON GreatPower where toJSON (GreatPower p) = String . fromString . show $ p instance FromJSON GreatPower where parseJSON (String txt) = case reads (T.unpack txt) of (greatPower, _) : _ -> return (GreatPower greatPower) _ -> empty parseJSON _ = empty instance JSONSchema GreatPower where schema _ = Value (LengthBound Nothing Nothing)