{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE LambdaCase         #-}
{-# LANGUAGE OverloadedStrings  #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.KinesisAnalytics.Types.Sum
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
module Network.AWS.KinesisAnalytics.Types.Sum where

import           Network.AWS.Prelude

data ApplicationStatus
    = Deleting
    | Ready
    | Running
    | Starting
    | Stopping
    | Updating
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText ApplicationStatus where
    parser = takeLowerText >>= \case
        "deleting" -> pure Deleting
        "ready" -> pure Ready
        "running" -> pure Running
        "starting" -> pure Starting
        "stopping" -> pure Stopping
        "updating" -> pure Updating
        e -> fromTextError $ "Failure parsing ApplicationStatus from value: '" <> e
           <> "'. Accepted values: deleting, ready, running, starting, stopping, updating"

instance ToText ApplicationStatus where
    toText = \case
        Deleting -> "DELETING"
        Ready -> "READY"
        Running -> "RUNNING"
        Starting -> "STARTING"
        Stopping -> "STOPPING"
        Updating -> "UPDATING"

instance Hashable     ApplicationStatus
instance NFData       ApplicationStatus
instance ToByteString ApplicationStatus
instance ToQuery      ApplicationStatus
instance ToHeader     ApplicationStatus

instance FromJSON ApplicationStatus where
    parseJSON = parseJSONText "ApplicationStatus"

data InputStartingPosition
    = LastStoppedPoint
    | Now
    | TrimHorizon
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText InputStartingPosition where
    parser = takeLowerText >>= \case
        "last_stopped_point" -> pure LastStoppedPoint
        "now" -> pure Now
        "trim_horizon" -> pure TrimHorizon
        e -> fromTextError $ "Failure parsing InputStartingPosition from value: '" <> e
           <> "'. Accepted values: last_stopped_point, now, trim_horizon"

instance ToText InputStartingPosition where
    toText = \case
        LastStoppedPoint -> "LAST_STOPPED_POINT"
        Now -> "NOW"
        TrimHorizon -> "TRIM_HORIZON"

instance Hashable     InputStartingPosition
instance NFData       InputStartingPosition
instance ToByteString InputStartingPosition
instance ToQuery      InputStartingPosition
instance ToHeader     InputStartingPosition

instance ToJSON InputStartingPosition where
    toJSON = toJSONText

instance FromJSON InputStartingPosition where
    parseJSON = parseJSONText "InputStartingPosition"

data RecordFormatType
    = CSV
    | JSON
    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)

instance FromText RecordFormatType where
    parser = takeLowerText >>= \case
        "csv" -> pure CSV
        "json" -> pure JSON
        e -> fromTextError $ "Failure parsing RecordFormatType from value: '" <> e
           <> "'. Accepted values: csv, json"

instance ToText RecordFormatType where
    toText = \case
        CSV -> "CSV"
        JSON -> "JSON"

instance Hashable     RecordFormatType
instance NFData       RecordFormatType
instance ToByteString RecordFormatType
instance ToQuery      RecordFormatType
instance ToHeader     RecordFormatType

instance ToJSON RecordFormatType where
    toJSON = toJSONText

instance FromJSON RecordFormatType where
    parseJSON = parseJSONText "RecordFormatType"