module Network.Bugsnag.ReleaseStage
    ( BugsnagReleaseStage(..)
    )
where

import Prelude

import Data.Aeson
import Data.Text (Text)

data BugsnagReleaseStage
    = DevelopmentReleaseStage
    | StagingReleaseStage
    | ProductionReleaseStage
    | CustomReleaseStage Text
    deriving stock (BugsnagReleaseStage -> BugsnagReleaseStage -> Bool
(BugsnagReleaseStage -> BugsnagReleaseStage -> Bool)
-> (BugsnagReleaseStage -> BugsnagReleaseStage -> Bool)
-> Eq BugsnagReleaseStage
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BugsnagReleaseStage -> BugsnagReleaseStage -> Bool
$c/= :: BugsnagReleaseStage -> BugsnagReleaseStage -> Bool
== :: BugsnagReleaseStage -> BugsnagReleaseStage -> Bool
$c== :: BugsnagReleaseStage -> BugsnagReleaseStage -> Bool
Eq, Int -> BugsnagReleaseStage -> ShowS
[BugsnagReleaseStage] -> ShowS
BugsnagReleaseStage -> String
(Int -> BugsnagReleaseStage -> ShowS)
-> (BugsnagReleaseStage -> String)
-> ([BugsnagReleaseStage] -> ShowS)
-> Show BugsnagReleaseStage
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BugsnagReleaseStage] -> ShowS
$cshowList :: [BugsnagReleaseStage] -> ShowS
show :: BugsnagReleaseStage -> String
$cshow :: BugsnagReleaseStage -> String
showsPrec :: Int -> BugsnagReleaseStage -> ShowS
$cshowsPrec :: Int -> BugsnagReleaseStage -> ShowS
Show)

instance FromJSON BugsnagReleaseStage where
    parseJSON :: Value -> Parser BugsnagReleaseStage
parseJSON = String
-> (Text -> Parser BugsnagReleaseStage)
-> Value
-> Parser BugsnagReleaseStage
forall a. String -> (Text -> Parser a) -> Value -> Parser a
withText String
"ReleaseStage" ((Text -> Parser BugsnagReleaseStage)
 -> Value -> Parser BugsnagReleaseStage)
-> (Text -> Parser BugsnagReleaseStage)
-> Value
-> Parser BugsnagReleaseStage
forall a b. (a -> b) -> a -> b
$ \case
        Text
"development" -> BugsnagReleaseStage -> Parser BugsnagReleaseStage
forall (f :: * -> *) a. Applicative f => a -> f a
pure BugsnagReleaseStage
DevelopmentReleaseStage
        Text
"staging" -> BugsnagReleaseStage -> Parser BugsnagReleaseStage
forall (f :: * -> *) a. Applicative f => a -> f a
pure BugsnagReleaseStage
StagingReleaseStage
        Text
"production" -> BugsnagReleaseStage -> Parser BugsnagReleaseStage
forall (f :: * -> *) a. Applicative f => a -> f a
pure BugsnagReleaseStage
ProductionReleaseStage
        Text
t -> BugsnagReleaseStage -> Parser BugsnagReleaseStage
forall (f :: * -> *) a. Applicative f => a -> f a
pure (BugsnagReleaseStage -> Parser BugsnagReleaseStage)
-> BugsnagReleaseStage -> Parser BugsnagReleaseStage
forall a b. (a -> b) -> a -> b
$ Text -> BugsnagReleaseStage
CustomReleaseStage Text
t

instance ToJSON BugsnagReleaseStage where
    toJSON :: BugsnagReleaseStage -> Value
toJSON BugsnagReleaseStage
DevelopmentReleaseStage = Text -> Value
String Text
"development"
    toJSON BugsnagReleaseStage
StagingReleaseStage = Text -> Value
String Text
"staging"
    toJSON BugsnagReleaseStage
ProductionReleaseStage = Text -> Value
String Text
"production"
    toJSON (CustomReleaseStage Text
t) = Text -> Value
String Text
t