{-# OPTIONS_GHC -Wno-orphans #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} {-| Module : GHCup.Types.JSON.Versions Description : GHCup Version JSON types/instances Copyright : (c) Julian Ospald, 2020 License : LGPL-3.0 Maintainer : hasufell@hasufell.de Stability : experimental Portability : portable -} module GHCup.Types.JSON.Versions where import Data.Aeson hiding (Key) import Data.Aeson.Types hiding (Key) import Data.Versions import qualified Data.Text as T instance ToJSON Versioning where toJSON = toJSON . prettyV instance FromJSON Versioning where parseJSON = withText "Versioning" $ \t -> case versioning t of Right x -> pure x Left e -> fail $ "Failure in GHCTargetVersion (FromJSON)" <> show e instance ToJSONKey Versioning where toJSONKey = toJSONKeyText $ \x -> prettyV x instance FromJSONKey Versioning where fromJSONKey = FromJSONKeyTextParser $ \t -> case versioning t of Right x -> pure x Left e -> fail $ "Failure in Versioning (FromJSONKey)" <> show e instance ToJSONKey (Maybe Versioning) where toJSONKey = toJSONKeyText $ \case Just x -> prettyV x Nothing -> T.pack "unknown_versioning" instance FromJSONKey (Maybe Versioning) where fromJSONKey = FromJSONKeyTextParser $ \t -> if t == T.pack "unknown_versioning" then pure Nothing else just t where just t = case versioning t of Right x -> pure $ Just x Left e -> fail $ "Failure in (Maybe Versioning) (FromJSONKey)" <> show e instance ToJSONKey (Maybe Version) where toJSONKey = toJSONKeyText $ \case Just x -> prettyVer x Nothing -> T.pack "unknown_version" instance FromJSONKey (Maybe Version) where fromJSONKey = FromJSONKeyTextParser $ \t -> if t == T.pack "unknown_version" then pure Nothing else just t where just t = case version t of Right x -> pure $ Just x Left e -> fail $ "Failure in (Maybe Version) (FromJSONKey)" <> show e instance ToJSON Version where toJSON = toJSON . prettyVer instance FromJSON Version where parseJSON = withText "Version" $ \t -> case version t of Right x -> pure x Left e -> fail $ "Failure in Version (FromJSON)" <> show e instance ToJSONKey Version where toJSONKey = toJSONKeyText $ \x -> prettyVer x instance FromJSONKey Version where fromJSONKey = FromJSONKeyTextParser $ \t -> case version t of Right x -> pure x Left e -> fail $ "Failure in Version (FromJSONKey)" <> show e instance ToJSON PVP where toJSON = toJSON . prettyPVP instance FromJSON PVP where parseJSON = withText "PVP" $ \t -> case pvp t of Right x -> pure x Left e -> fail $ "Failure in PVP (FromJSON)" <> show e