91 lines
2.8 KiB
Haskell
91 lines
2.8 KiB
Haskell
{-# 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
|