{-# OPTIONS_GHC -Wno-orphans #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
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 :: Versioning -> Value
toJSON = Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> (Versioning -> Text) -> Versioning -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Versioning -> Text
prettyV
instance FromJSON Versioning where
parseJSON :: Value -> Parser Versioning
parseJSON = String -> (Text -> Parser Versioning) -> Value -> Parser Versioning
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Versioning" ((Text -> Parser Versioning) -> Value -> Parser Versioning)
-> (Text -> Parser Versioning) -> Value -> Parser Versioning
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text -> Either ParsingError Versioning
versioning Text
t of
Right Versioning
x -> Versioning -> Parser Versioning
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Versioning
x
Left ParsingError
e -> String -> Parser Versioning
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Versioning) -> String -> Parser Versioning
forall a b. (a -> b) -> a -> b
$ String
"Failure in GHCTargetVersion (FromJSON)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSONKey Versioning where
toJSONKey :: ToJSONKeyFunction Versioning
toJSONKey = (Versioning -> Text) -> ToJSONKeyFunction Versioning
forall a. (a -> Text) -> ToJSONKeyFunction a
toJSONKeyText ((Versioning -> Text) -> ToJSONKeyFunction Versioning)
-> (Versioning -> Text) -> ToJSONKeyFunction Versioning
forall a b. (a -> b) -> a -> b
$ \Versioning
x -> Versioning -> Text
prettyV Versioning
x
instance FromJSONKey Versioning where
fromJSONKey :: FromJSONKeyFunction Versioning
fromJSONKey = (Text -> Parser Versioning) -> FromJSONKeyFunction Versioning
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Versioning) -> FromJSONKeyFunction Versioning)
-> (Text -> Parser Versioning) -> FromJSONKeyFunction Versioning
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text -> Either ParsingError Versioning
versioning Text
t of
Right Versioning
x -> Versioning -> Parser Versioning
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Versioning
x
Left ParsingError
e -> String -> Parser Versioning
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Versioning) -> String -> Parser Versioning
forall a b. (a -> b) -> a -> b
$ String
"Failure in Versioning (FromJSONKey)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSONKey (Maybe Versioning) where
toJSONKey :: ToJSONKeyFunction (Maybe Versioning)
toJSONKey = (Maybe Versioning -> Text) -> ToJSONKeyFunction (Maybe Versioning)
forall a. (a -> Text) -> ToJSONKeyFunction a
toJSONKeyText ((Maybe Versioning -> Text)
-> ToJSONKeyFunction (Maybe Versioning))
-> (Maybe Versioning -> Text)
-> ToJSONKeyFunction (Maybe Versioning)
forall a b. (a -> b) -> a -> b
$ \case
Just Versioning
x -> Versioning -> Text
prettyV Versioning
x
Maybe Versioning
Nothing -> String -> Text
T.pack String
"unknown_versioning"
instance FromJSONKey (Maybe Versioning) where
fromJSONKey :: FromJSONKeyFunction (Maybe Versioning)
fromJSONKey = (Text -> Parser (Maybe Versioning))
-> FromJSONKeyFunction (Maybe Versioning)
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser (Maybe Versioning))
-> FromJSONKeyFunction (Maybe Versioning))
-> (Text -> Parser (Maybe Versioning))
-> FromJSONKeyFunction (Maybe Versioning)
forall a b. (a -> b) -> a -> b
$ \Text
t ->
if Text
t Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== String -> Text
T.pack String
"unknown_versioning" then Maybe Versioning -> Parser (Maybe Versioning)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Versioning
forall a. Maybe a
Nothing else Text -> Parser (Maybe Versioning)
forall {f :: * -> *}. MonadFail f => Text -> f (Maybe Versioning)
just Text
t
where
just :: Text -> f (Maybe Versioning)
just Text
t = case Text -> Either ParsingError Versioning
versioning Text
t of
Right Versioning
x -> Maybe Versioning -> f (Maybe Versioning)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Versioning -> f (Maybe Versioning))
-> Maybe Versioning -> f (Maybe Versioning)
forall a b. (a -> b) -> a -> b
$ Versioning -> Maybe Versioning
forall a. a -> Maybe a
Just Versioning
x
Left ParsingError
e -> String -> f (Maybe Versioning)
forall a. String -> f a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> f (Maybe Versioning)) -> String -> f (Maybe Versioning)
forall a b. (a -> b) -> a -> b
$ String
"Failure in (Maybe Versioning) (FromJSONKey)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSONKey (Maybe Version) where
toJSONKey :: ToJSONKeyFunction (Maybe Version)
toJSONKey = (Maybe Version -> Text) -> ToJSONKeyFunction (Maybe Version)
forall a. (a -> Text) -> ToJSONKeyFunction a
toJSONKeyText ((Maybe Version -> Text) -> ToJSONKeyFunction (Maybe Version))
-> (Maybe Version -> Text) -> ToJSONKeyFunction (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \case
Just Version
x -> Version -> Text
prettyVer Version
x
Maybe Version
Nothing -> String -> Text
T.pack String
"unknown_version"
instance FromJSONKey (Maybe Version) where
fromJSONKey :: FromJSONKeyFunction (Maybe Version)
fromJSONKey = (Text -> Parser (Maybe Version))
-> FromJSONKeyFunction (Maybe Version)
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser (Maybe Version))
-> FromJSONKeyFunction (Maybe Version))
-> (Text -> Parser (Maybe Version))
-> FromJSONKeyFunction (Maybe Version)
forall a b. (a -> b) -> a -> b
$ \Text
t ->
if Text
t Text -> Text -> Bool
forall a. Eq a => a -> a -> Bool
== String -> Text
T.pack String
"unknown_version" then Maybe Version -> Parser (Maybe Version)
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Maybe Version
forall a. Maybe a
Nothing else Text -> Parser (Maybe Version)
forall {f :: * -> *}. MonadFail f => Text -> f (Maybe Version)
just Text
t
where
just :: Text -> f (Maybe Version)
just Text
t = case Text -> Either ParsingError Version
version Text
t of
Right Version
x -> Maybe Version -> f (Maybe Version)
forall a. a -> f a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Maybe Version -> f (Maybe Version))
-> Maybe Version -> f (Maybe Version)
forall a b. (a -> b) -> a -> b
$ Version -> Maybe Version
forall a. a -> Maybe a
Just Version
x
Left ParsingError
e -> String -> f (Maybe Version)
forall a. String -> f a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> f (Maybe Version)) -> String -> f (Maybe Version)
forall a b. (a -> b) -> a -> b
$ String
"Failure in (Maybe Version) (FromJSONKey)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSON Version where
toJSON :: Version -> Value
toJSON = Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> (Version -> Text) -> Version -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Version -> Text
prettyVer
instance FromJSON Version where
parseJSON :: Value -> Parser Version
parseJSON = String -> (Text -> Parser Version) -> Value -> Parser Version
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"Version" ((Text -> Parser Version) -> Value -> Parser Version)
-> (Text -> Parser Version) -> Value -> Parser Version
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text -> Either ParsingError Version
version Text
t of
Right Version
x -> Version -> Parser Version
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Version
x
Left ParsingError
e -> String -> Parser Version
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Version) -> String -> Parser Version
forall a b. (a -> b) -> a -> b
$ String
"Failure in Version (FromJSON)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSONKey Version where
toJSONKey :: ToJSONKeyFunction Version
toJSONKey = (Version -> Text) -> ToJSONKeyFunction Version
forall a. (a -> Text) -> ToJSONKeyFunction a
toJSONKeyText ((Version -> Text) -> ToJSONKeyFunction Version)
-> (Version -> Text) -> ToJSONKeyFunction Version
forall a b. (a -> b) -> a -> b
$ \Version
x -> Version -> Text
prettyVer Version
x
instance FromJSONKey Version where
fromJSONKey :: FromJSONKeyFunction Version
fromJSONKey = (Text -> Parser Version) -> FromJSONKeyFunction Version
forall a. (Text -> Parser a) -> FromJSONKeyFunction a
FromJSONKeyTextParser ((Text -> Parser Version) -> FromJSONKeyFunction Version)
-> (Text -> Parser Version) -> FromJSONKeyFunction Version
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text -> Either ParsingError Version
version Text
t of
Right Version
x -> Version -> Parser Version
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Version
x
Left ParsingError
e -> String -> Parser Version
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser Version) -> String -> Parser Version
forall a b. (a -> b) -> a -> b
$ String
"Failure in Version (FromJSONKey)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e
instance ToJSON PVP where
toJSON :: PVP -> Value
toJSON = Text -> Value
forall a. ToJSON a => a -> Value
toJSON (Text -> Value) -> (PVP -> Text) -> PVP -> Value
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PVP -> Text
prettyPVP
instance FromJSON PVP where
parseJSON :: Value -> Parser PVP
parseJSON = String -> (Text -> Parser PVP) -> Value -> Parser PVP
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"PVP" ((Text -> Parser PVP) -> Value -> Parser PVP)
-> (Text -> Parser PVP) -> Value -> Parser PVP
forall a b. (a -> b) -> a -> b
$ \Text
t -> case Text -> Either ParsingError PVP
pvp Text
t of
Right PVP
x -> PVP -> Parser PVP
forall a. a -> Parser a
forall (f :: * -> *) a. Applicative f => a -> f a
pure PVP
x
Left ParsingError
e -> String -> Parser PVP
forall a. String -> Parser a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Parser PVP) -> String -> Parser PVP
forall a b. (a -> b) -> a -> b
$ String
"Failure in PVP (FromJSON)" String -> String -> String
forall a. Semigroup a => a -> a -> a
<> ParsingError -> String
forall a. Show a => a -> String
show ParsingError
e