{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)
-}

#define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \
       && !defined(__HADDOCK_VERSION__))

module GI.Soup.Flags
    (

 -- * Flags
-- ** Cacheability #flag:Cacheability#

    Cacheability(..)                        ,


-- ** Expectation #flag:Expectation#

    Expectation(..)                         ,


-- ** MessageFlags #flag:MessageFlags#

    MessageFlags(..)                        ,


-- ** ServerListenOptions #flag:ServerListenOptions#

    ServerListenOptions(..)                 ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL


-- Flags ServerListenOptions
{- |
Options to pass to 'GI.Soup.Objects.Server.serverListen', etc.

'GI.Soup.Flags.ServerListenOptionsIpv4Only' and 'GI.Soup.Flags.ServerListenOptionsIpv6Only'
only make sense with 'GI.Soup.Objects.Server.serverListenAll' and
'GI.Soup.Objects.Server.serverListenLocal', not plain 'GI.Soup.Objects.Server.serverListen' (which
simply listens on whatever kind of socket you give it). And you
cannot specify both of them in a single call.

/Since: 2.48/
-}
data ServerListenOptions =
      ServerListenOptionsHttps
    {- ^
    Listen for https connections rather
      than plain http.
    -}
    | ServerListenOptionsIpv4Only
    {- ^
    Only listen on IPv4 interfaces.
    -}
    | ServerListenOptionsIpv6Only
    {- ^
    Only listen on IPv6 interfaces.
    -}
    | AnotherServerListenOptions Int
    -- ^ Catch-all for unknown values
    deriving (Show, Eq)

instance P.Enum ServerListenOptions where
    fromEnum ServerListenOptionsHttps = 1
    fromEnum ServerListenOptionsIpv4Only = 2
    fromEnum ServerListenOptionsIpv6Only = 4
    fromEnum (AnotherServerListenOptions k) = k

    toEnum 1 = ServerListenOptionsHttps
    toEnum 2 = ServerListenOptionsIpv4Only
    toEnum 4 = ServerListenOptionsIpv6Only
    toEnum k = AnotherServerListenOptions k

instance P.Ord ServerListenOptions where
    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)

foreign import ccall "soup_server_listen_options_get_type" c_soup_server_listen_options_get_type ::
    IO GType

instance BoxedFlags ServerListenOptions where
    boxedFlagsType _ = c_soup_server_listen_options_get_type

instance IsGFlag ServerListenOptions

-- Flags MessageFlags
{- |
Various flags that can be set on a 'GI.Soup.Objects.Message.Message' to alter its
behavior.
-}
data MessageFlags =
      MessageFlagsNoRedirect
    {- ^
    The session should not follow redirect
      (3xx) responses received by this message.
    -}
    | MessageFlagsCanRebuild
    {- ^
    The caller will rebuild the request
      body if the message is restarted; see
      'GI.Soup.Structs.MessageBody.messageBodySetAccumulate' for more details.
    -}
    | MessageFlagsOverwriteChunks
    {- ^
    Deprecated: equivalent to calling
      'GI.Soup.Structs.MessageBody.messageBodySetAccumulate' on the incoming message body
      (ie, 'GI.Soup.Objects.Message.Message':@/response_body/@ for a client-side request),
      passing 'False'.
    -}
    | MessageFlagsContentDecoded
    {- ^
    Set by 'GI.Soup.Objects.ContentDecoder.ContentDecoder' to
      indicate that it has removed the Content-Encoding on a message (and
      so headers such as Content-Length may no longer accurately describe
      the body).
    -}
    | MessageFlagsCertificateTrusted
    {- ^
    if set after an https response
      has been received, indicates that the server\'s SSL certificate is
      trusted according to the session\'s CA.
    -}
    | MessageFlagsNewConnection
    {- ^
    Requests that the message should be
      sent on a newly-created connection, not reusing an existing
      persistent connection. Note that messages with non-idempotent
      'GI.Soup.Objects.Message.Message':@/method/@\<!-- -->s behave this way by default, unless
      @/SOUP_MESSAGE_IDEMPOTENT/@ is set.
    -}
    | MessageFlagsIdempotent
    {- ^
    The message is considered idempotent,
      regardless its 'GI.Soup.Objects.Message.Message':@/method/@, and allows reuse of existing
      idle connections, instead of always requiring a new one, unless
      @/SOUP_MESSAGE_NEW_CONNECTION/@ is set.
    -}
    | MessageFlagsIgnoreConnectionLimits
    {- ^
    Request that a new connection is
      created for the message if there aren\'t idle connections available
      and it\'s not possible to create new connections due to any of the
      connection limits has been reached. If a dedicated connection is
      eventually created for this message, it will be dropped when the
      message finishes. Since 2.50
    -}
    | MessageFlagsDoNotUseAuthCache
    {- ^
    The 'GI.Soup.Objects.AuthManager.AuthManager' should not use
      the credentials cache for this message, neither to use cached credentials
      to automatically authenticate this message nor to cache the credentials
      after the message is successfully authenticated. This applies to both server
      and proxy authentication. Note that 'GI.Soup.Objects.Session.Session'::@/authenticate/@ signal will
      be emitted, if you want to disable authentication for a message use
      'GI.Soup.Objects.Message.messageDisableFeature' passing @/SOUP_TYPE_AUTH_MANAGER/@ instead. Since 2.58
    -}
    | AnotherMessageFlags Int
    -- ^ Catch-all for unknown values
    deriving (Show, Eq)

instance P.Enum MessageFlags where
    fromEnum MessageFlagsNoRedirect = 2
    fromEnum MessageFlagsCanRebuild = 4
    fromEnum MessageFlagsOverwriteChunks = 8
    fromEnum MessageFlagsContentDecoded = 16
    fromEnum MessageFlagsCertificateTrusted = 32
    fromEnum MessageFlagsNewConnection = 64
    fromEnum MessageFlagsIdempotent = 128
    fromEnum MessageFlagsIgnoreConnectionLimits = 256
    fromEnum MessageFlagsDoNotUseAuthCache = 512
    fromEnum (AnotherMessageFlags k) = k

    toEnum 2 = MessageFlagsNoRedirect
    toEnum 4 = MessageFlagsCanRebuild
    toEnum 8 = MessageFlagsOverwriteChunks
    toEnum 16 = MessageFlagsContentDecoded
    toEnum 32 = MessageFlagsCertificateTrusted
    toEnum 64 = MessageFlagsNewConnection
    toEnum 128 = MessageFlagsIdempotent
    toEnum 256 = MessageFlagsIgnoreConnectionLimits
    toEnum 512 = MessageFlagsDoNotUseAuthCache
    toEnum k = AnotherMessageFlags k

instance P.Ord MessageFlags where
    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)

foreign import ccall "soup_message_flags_get_type" c_soup_message_flags_get_type ::
    IO GType

instance BoxedFlags MessageFlags where
    boxedFlagsType _ = c_soup_message_flags_get_type

instance IsGFlag MessageFlags

-- Flags Expectation
{- |
Represents the parsed value of the \"Expect\" header.
-}
data Expectation =
      ExpectationUnrecognized
    {- ^
    any unrecognized expectation
    -}
    | ExpectationContinue
    {- ^
    \"100-continue\"
    -}
    | AnotherExpectation Int
    -- ^ Catch-all for unknown values
    deriving (Show, Eq)

instance P.Enum Expectation where
    fromEnum ExpectationUnrecognized = 1
    fromEnum ExpectationContinue = 2
    fromEnum (AnotherExpectation k) = k

    toEnum 1 = ExpectationUnrecognized
    toEnum 2 = ExpectationContinue
    toEnum k = AnotherExpectation k

instance P.Ord Expectation where
    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)

foreign import ccall "soup_expectation_get_type" c_soup_expectation_get_type ::
    IO GType

instance BoxedFlags Expectation where
    boxedFlagsType _ = c_soup_expectation_get_type

instance IsGFlag Expectation

-- Flags Cacheability
{- |
/No description available in the introspection data./
-}
data Cacheability =
      CacheabilityCacheable
    {- ^
    /No description available in the introspection data./
    -}
    | CacheabilityUncacheable
    {- ^
    /No description available in the introspection data./
    -}
    | CacheabilityInvalidates
    {- ^
    /No description available in the introspection data./
    -}
    | CacheabilityValidates
    {- ^
    /No description available in the introspection data./
    -}
    | AnotherCacheability Int
    -- ^ Catch-all for unknown values
    deriving (Show, Eq)

instance P.Enum Cacheability where
    fromEnum CacheabilityCacheable = 1
    fromEnum CacheabilityUncacheable = 2
    fromEnum CacheabilityInvalidates = 4
    fromEnum CacheabilityValidates = 8
    fromEnum (AnotherCacheability k) = k

    toEnum 1 = CacheabilityCacheable
    toEnum 2 = CacheabilityUncacheable
    toEnum 4 = CacheabilityInvalidates
    toEnum 8 = CacheabilityValidates
    toEnum k = AnotherCacheability k

instance P.Ord Cacheability where
    compare a b = P.compare (P.fromEnum a) (P.fromEnum b)

foreign import ccall "soup_cacheability_get_type" c_soup_cacheability_get_type ::
    IO GType

instance BoxedFlags Cacheability where
    boxedFlagsType _ = c_soup_cacheability_get_type

instance IsGFlag Cacheability