{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PatternSynonyms #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}

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

-- |
-- Module      : Amazonka.NetworkFirewall.Types.StatefulRuleProtocol
-- Copyright   : (c) 2013-2021 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.NetworkFirewall.Types.StatefulRuleProtocol
  ( StatefulRuleProtocol
      ( ..,
        StatefulRuleProtocol_DCERPC,
        StatefulRuleProtocol_DHCP,
        StatefulRuleProtocol_DNS,
        StatefulRuleProtocol_FTP,
        StatefulRuleProtocol_HTTP,
        StatefulRuleProtocol_ICMP,
        StatefulRuleProtocol_IKEV2,
        StatefulRuleProtocol_IMAP,
        StatefulRuleProtocol_IP,
        StatefulRuleProtocol_KRB5,
        StatefulRuleProtocol_MSN,
        StatefulRuleProtocol_NTP,
        StatefulRuleProtocol_SMB,
        StatefulRuleProtocol_SMTP,
        StatefulRuleProtocol_SSH,
        StatefulRuleProtocol_TCP,
        StatefulRuleProtocol_TFTP,
        StatefulRuleProtocol_TLS,
        StatefulRuleProtocol_UDP
      ),
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Prelude as Prelude

newtype StatefulRuleProtocol = StatefulRuleProtocol'
  { StatefulRuleProtocol -> Text
fromStatefulRuleProtocol ::
      Core.Text
  }
  deriving stock
    ( Int -> StatefulRuleProtocol -> ShowS
[StatefulRuleProtocol] -> ShowS
StatefulRuleProtocol -> String
(Int -> StatefulRuleProtocol -> ShowS)
-> (StatefulRuleProtocol -> String)
-> ([StatefulRuleProtocol] -> ShowS)
-> Show StatefulRuleProtocol
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [StatefulRuleProtocol] -> ShowS
$cshowList :: [StatefulRuleProtocol] -> ShowS
show :: StatefulRuleProtocol -> String
$cshow :: StatefulRuleProtocol -> String
showsPrec :: Int -> StatefulRuleProtocol -> ShowS
$cshowsPrec :: Int -> StatefulRuleProtocol -> ShowS
Prelude.Show,
      ReadPrec [StatefulRuleProtocol]
ReadPrec StatefulRuleProtocol
Int -> ReadS StatefulRuleProtocol
ReadS [StatefulRuleProtocol]
(Int -> ReadS StatefulRuleProtocol)
-> ReadS [StatefulRuleProtocol]
-> ReadPrec StatefulRuleProtocol
-> ReadPrec [StatefulRuleProtocol]
-> Read StatefulRuleProtocol
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [StatefulRuleProtocol]
$creadListPrec :: ReadPrec [StatefulRuleProtocol]
readPrec :: ReadPrec StatefulRuleProtocol
$creadPrec :: ReadPrec StatefulRuleProtocol
readList :: ReadS [StatefulRuleProtocol]
$creadList :: ReadS [StatefulRuleProtocol]
readsPrec :: Int -> ReadS StatefulRuleProtocol
$creadsPrec :: Int -> ReadS StatefulRuleProtocol
Prelude.Read,
      StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
(StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> Eq StatefulRuleProtocol
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c/= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
== :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c== :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
Prelude.Eq,
      Eq StatefulRuleProtocol
Eq StatefulRuleProtocol
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Ordering)
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> (StatefulRuleProtocol -> StatefulRuleProtocol -> Bool)
-> (StatefulRuleProtocol
    -> StatefulRuleProtocol -> StatefulRuleProtocol)
-> (StatefulRuleProtocol
    -> StatefulRuleProtocol -> StatefulRuleProtocol)
-> Ord StatefulRuleProtocol
StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
StatefulRuleProtocol -> StatefulRuleProtocol -> Ordering
StatefulRuleProtocol
-> StatefulRuleProtocol -> StatefulRuleProtocol
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: StatefulRuleProtocol
-> StatefulRuleProtocol -> StatefulRuleProtocol
$cmin :: StatefulRuleProtocol
-> StatefulRuleProtocol -> StatefulRuleProtocol
max :: StatefulRuleProtocol
-> StatefulRuleProtocol -> StatefulRuleProtocol
$cmax :: StatefulRuleProtocol
-> StatefulRuleProtocol -> StatefulRuleProtocol
>= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c>= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
> :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c> :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
<= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c<= :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
< :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
$c< :: StatefulRuleProtocol -> StatefulRuleProtocol -> Bool
compare :: StatefulRuleProtocol -> StatefulRuleProtocol -> Ordering
$ccompare :: StatefulRuleProtocol -> StatefulRuleProtocol -> Ordering
$cp1Ord :: Eq StatefulRuleProtocol
Prelude.Ord,
      (forall x. StatefulRuleProtocol -> Rep StatefulRuleProtocol x)
-> (forall x. Rep StatefulRuleProtocol x -> StatefulRuleProtocol)
-> Generic StatefulRuleProtocol
forall x. Rep StatefulRuleProtocol x -> StatefulRuleProtocol
forall x. StatefulRuleProtocol -> Rep StatefulRuleProtocol x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep StatefulRuleProtocol x -> StatefulRuleProtocol
$cfrom :: forall x. StatefulRuleProtocol -> Rep StatefulRuleProtocol x
Prelude.Generic
    )
  deriving newtype
    ( Int -> StatefulRuleProtocol -> Int
StatefulRuleProtocol -> Int
(Int -> StatefulRuleProtocol -> Int)
-> (StatefulRuleProtocol -> Int) -> Hashable StatefulRuleProtocol
forall a. (Int -> a -> Int) -> (a -> Int) -> Hashable a
hash :: StatefulRuleProtocol -> Int
$chash :: StatefulRuleProtocol -> Int
hashWithSalt :: Int -> StatefulRuleProtocol -> Int
$chashWithSalt :: Int -> StatefulRuleProtocol -> Int
Prelude.Hashable,
      StatefulRuleProtocol -> ()
(StatefulRuleProtocol -> ()) -> NFData StatefulRuleProtocol
forall a. (a -> ()) -> NFData a
rnf :: StatefulRuleProtocol -> ()
$crnf :: StatefulRuleProtocol -> ()
Prelude.NFData,
      Text -> Either String StatefulRuleProtocol
(Text -> Either String StatefulRuleProtocol)
-> FromText StatefulRuleProtocol
forall a. (Text -> Either String a) -> FromText a
fromText :: Text -> Either String StatefulRuleProtocol
$cfromText :: Text -> Either String StatefulRuleProtocol
Core.FromText,
      StatefulRuleProtocol -> Text
(StatefulRuleProtocol -> Text) -> ToText StatefulRuleProtocol
forall a. (a -> Text) -> ToText a
toText :: StatefulRuleProtocol -> Text
$ctoText :: StatefulRuleProtocol -> Text
Core.ToText,
      StatefulRuleProtocol -> ByteString
(StatefulRuleProtocol -> ByteString)
-> ToByteString StatefulRuleProtocol
forall a. (a -> ByteString) -> ToByteString a
toBS :: StatefulRuleProtocol -> ByteString
$ctoBS :: StatefulRuleProtocol -> ByteString
Core.ToByteString,
      StatefulRuleProtocol -> ByteStringBuilder
(StatefulRuleProtocol -> ByteStringBuilder)
-> ToLog StatefulRuleProtocol
forall a. (a -> ByteStringBuilder) -> ToLog a
build :: StatefulRuleProtocol -> ByteStringBuilder
$cbuild :: StatefulRuleProtocol -> ByteStringBuilder
Core.ToLog,
      HeaderName -> StatefulRuleProtocol -> [Header]
(HeaderName -> StatefulRuleProtocol -> [Header])
-> ToHeader StatefulRuleProtocol
forall a. (HeaderName -> a -> [Header]) -> ToHeader a
toHeader :: HeaderName -> StatefulRuleProtocol -> [Header]
$ctoHeader :: HeaderName -> StatefulRuleProtocol -> [Header]
Core.ToHeader,
      StatefulRuleProtocol -> QueryString
(StatefulRuleProtocol -> QueryString)
-> ToQuery StatefulRuleProtocol
forall a. (a -> QueryString) -> ToQuery a
toQuery :: StatefulRuleProtocol -> QueryString
$ctoQuery :: StatefulRuleProtocol -> QueryString
Core.ToQuery,
      Value -> Parser [StatefulRuleProtocol]
Value -> Parser StatefulRuleProtocol
(Value -> Parser StatefulRuleProtocol)
-> (Value -> Parser [StatefulRuleProtocol])
-> FromJSON StatefulRuleProtocol
forall a.
(Value -> Parser a) -> (Value -> Parser [a]) -> FromJSON a
parseJSONList :: Value -> Parser [StatefulRuleProtocol]
$cparseJSONList :: Value -> Parser [StatefulRuleProtocol]
parseJSON :: Value -> Parser StatefulRuleProtocol
$cparseJSON :: Value -> Parser StatefulRuleProtocol
Core.FromJSON,
      FromJSONKeyFunction [StatefulRuleProtocol]
FromJSONKeyFunction StatefulRuleProtocol
FromJSONKeyFunction StatefulRuleProtocol
-> FromJSONKeyFunction [StatefulRuleProtocol]
-> FromJSONKey StatefulRuleProtocol
forall a.
FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a
fromJSONKeyList :: FromJSONKeyFunction [StatefulRuleProtocol]
$cfromJSONKeyList :: FromJSONKeyFunction [StatefulRuleProtocol]
fromJSONKey :: FromJSONKeyFunction StatefulRuleProtocol
$cfromJSONKey :: FromJSONKeyFunction StatefulRuleProtocol
Core.FromJSONKey,
      [StatefulRuleProtocol] -> Encoding
[StatefulRuleProtocol] -> Value
StatefulRuleProtocol -> Encoding
StatefulRuleProtocol -> Value
(StatefulRuleProtocol -> Value)
-> (StatefulRuleProtocol -> Encoding)
-> ([StatefulRuleProtocol] -> Value)
-> ([StatefulRuleProtocol] -> Encoding)
-> ToJSON StatefulRuleProtocol
forall a.
(a -> Value)
-> (a -> Encoding)
-> ([a] -> Value)
-> ([a] -> Encoding)
-> ToJSON a
toEncodingList :: [StatefulRuleProtocol] -> Encoding
$ctoEncodingList :: [StatefulRuleProtocol] -> Encoding
toJSONList :: [StatefulRuleProtocol] -> Value
$ctoJSONList :: [StatefulRuleProtocol] -> Value
toEncoding :: StatefulRuleProtocol -> Encoding
$ctoEncoding :: StatefulRuleProtocol -> Encoding
toJSON :: StatefulRuleProtocol -> Value
$ctoJSON :: StatefulRuleProtocol -> Value
Core.ToJSON,
      ToJSONKeyFunction [StatefulRuleProtocol]
ToJSONKeyFunction StatefulRuleProtocol
ToJSONKeyFunction StatefulRuleProtocol
-> ToJSONKeyFunction [StatefulRuleProtocol]
-> ToJSONKey StatefulRuleProtocol
forall a.
ToJSONKeyFunction a -> ToJSONKeyFunction [a] -> ToJSONKey a
toJSONKeyList :: ToJSONKeyFunction [StatefulRuleProtocol]
$ctoJSONKeyList :: ToJSONKeyFunction [StatefulRuleProtocol]
toJSONKey :: ToJSONKeyFunction StatefulRuleProtocol
$ctoJSONKey :: ToJSONKeyFunction StatefulRuleProtocol
Core.ToJSONKey,
      [Node] -> Either String StatefulRuleProtocol
([Node] -> Either String StatefulRuleProtocol)
-> FromXML StatefulRuleProtocol
forall a. ([Node] -> Either String a) -> FromXML a
parseXML :: [Node] -> Either String StatefulRuleProtocol
$cparseXML :: [Node] -> Either String StatefulRuleProtocol
Core.FromXML,
      StatefulRuleProtocol -> XML
(StatefulRuleProtocol -> XML) -> ToXML StatefulRuleProtocol
forall a. (a -> XML) -> ToXML a
toXML :: StatefulRuleProtocol -> XML
$ctoXML :: StatefulRuleProtocol -> XML
Core.ToXML
    )

pattern StatefulRuleProtocol_DCERPC :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_DCERPC :: StatefulRuleProtocol
$mStatefulRuleProtocol_DCERPC :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_DCERPC = StatefulRuleProtocol' "DCERPC"

pattern StatefulRuleProtocol_DHCP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_DHCP :: StatefulRuleProtocol
$mStatefulRuleProtocol_DHCP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_DHCP = StatefulRuleProtocol' "DHCP"

pattern StatefulRuleProtocol_DNS :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_DNS :: StatefulRuleProtocol
$mStatefulRuleProtocol_DNS :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_DNS = StatefulRuleProtocol' "DNS"

pattern StatefulRuleProtocol_FTP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_FTP :: StatefulRuleProtocol
$mStatefulRuleProtocol_FTP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_FTP = StatefulRuleProtocol' "FTP"

pattern StatefulRuleProtocol_HTTP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_HTTP :: StatefulRuleProtocol
$mStatefulRuleProtocol_HTTP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_HTTP = StatefulRuleProtocol' "HTTP"

pattern StatefulRuleProtocol_ICMP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_ICMP :: StatefulRuleProtocol
$mStatefulRuleProtocol_ICMP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_ICMP = StatefulRuleProtocol' "ICMP"

pattern StatefulRuleProtocol_IKEV2 :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_IKEV2 :: StatefulRuleProtocol
$mStatefulRuleProtocol_IKEV2 :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_IKEV2 = StatefulRuleProtocol' "IKEV2"

pattern StatefulRuleProtocol_IMAP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_IMAP :: StatefulRuleProtocol
$mStatefulRuleProtocol_IMAP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_IMAP = StatefulRuleProtocol' "IMAP"

pattern StatefulRuleProtocol_IP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_IP :: StatefulRuleProtocol
$mStatefulRuleProtocol_IP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_IP = StatefulRuleProtocol' "IP"

pattern StatefulRuleProtocol_KRB5 :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_KRB5 :: StatefulRuleProtocol
$mStatefulRuleProtocol_KRB5 :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_KRB5 = StatefulRuleProtocol' "KRB5"

pattern StatefulRuleProtocol_MSN :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_MSN :: StatefulRuleProtocol
$mStatefulRuleProtocol_MSN :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_MSN = StatefulRuleProtocol' "MSN"

pattern StatefulRuleProtocol_NTP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_NTP :: StatefulRuleProtocol
$mStatefulRuleProtocol_NTP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_NTP = StatefulRuleProtocol' "NTP"

pattern StatefulRuleProtocol_SMB :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_SMB :: StatefulRuleProtocol
$mStatefulRuleProtocol_SMB :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_SMB = StatefulRuleProtocol' "SMB"

pattern StatefulRuleProtocol_SMTP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_SMTP :: StatefulRuleProtocol
$mStatefulRuleProtocol_SMTP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_SMTP = StatefulRuleProtocol' "SMTP"

pattern StatefulRuleProtocol_SSH :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_SSH :: StatefulRuleProtocol
$mStatefulRuleProtocol_SSH :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_SSH = StatefulRuleProtocol' "SSH"

pattern StatefulRuleProtocol_TCP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_TCP :: StatefulRuleProtocol
$mStatefulRuleProtocol_TCP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_TCP = StatefulRuleProtocol' "TCP"

pattern StatefulRuleProtocol_TFTP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_TFTP :: StatefulRuleProtocol
$mStatefulRuleProtocol_TFTP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_TFTP = StatefulRuleProtocol' "TFTP"

pattern StatefulRuleProtocol_TLS :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_TLS :: StatefulRuleProtocol
$mStatefulRuleProtocol_TLS :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_TLS = StatefulRuleProtocol' "TLS"

pattern StatefulRuleProtocol_UDP :: StatefulRuleProtocol
pattern $bStatefulRuleProtocol_UDP :: StatefulRuleProtocol
$mStatefulRuleProtocol_UDP :: forall r. StatefulRuleProtocol -> (Void# -> r) -> (Void# -> r) -> r
StatefulRuleProtocol_UDP = StatefulRuleProtocol' "UDP"

{-# COMPLETE
  StatefulRuleProtocol_DCERPC,
  StatefulRuleProtocol_DHCP,
  StatefulRuleProtocol_DNS,
  StatefulRuleProtocol_FTP,
  StatefulRuleProtocol_HTTP,
  StatefulRuleProtocol_ICMP,
  StatefulRuleProtocol_IKEV2,
  StatefulRuleProtocol_IMAP,
  StatefulRuleProtocol_IP,
  StatefulRuleProtocol_KRB5,
  StatefulRuleProtocol_MSN,
  StatefulRuleProtocol_NTP,
  StatefulRuleProtocol_SMB,
  StatefulRuleProtocol_SMTP,
  StatefulRuleProtocol_SSH,
  StatefulRuleProtocol_TCP,
  StatefulRuleProtocol_TFTP,
  StatefulRuleProtocol_TLS,
  StatefulRuleProtocol_UDP,
  StatefulRuleProtocol'
  #-}