{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- /No description available in the introspection data./

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

module GI.Soup.Objects.WebsocketExtensionDeflate
    ( 

-- * Exported types
    WebsocketExtensionDeflate(..)           ,
    IsWebsocketExtensionDeflate             ,
    toWebsocketExtensionDeflate             ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [configure]("GI.Soup.Objects.WebsocketExtension#g:method:configure"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [processIncomingMessage]("GI.Soup.Objects.WebsocketExtension#g:method:processIncomingMessage"), [processOutgoingMessage]("GI.Soup.Objects.WebsocketExtension#g:method:processOutgoingMessage"), [ref]("GI.GObject.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unref]("GI.GObject.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getData]("GI.GObject.Objects.Object#g:method:getData"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getRequestParams]("GI.Soup.Objects.WebsocketExtension#g:method:getRequestParams"), [getResponseParams]("GI.Soup.Objects.WebsocketExtension#g:method:getResponseParams").
-- 
-- ==== Setters
-- [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveWebsocketExtensionDeflateMethod  ,
#endif



    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
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
import qualified GHC.Records as R

import qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Soup.Objects.WebsocketExtension as Soup.WebsocketExtension

-- | Memory-managed wrapper type.
newtype WebsocketExtensionDeflate = WebsocketExtensionDeflate (SP.ManagedPtr WebsocketExtensionDeflate)
    deriving (WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool
(WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool)
-> (WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool)
-> Eq WebsocketExtensionDeflate
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool
$c/= :: WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool
== :: WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool
$c== :: WebsocketExtensionDeflate -> WebsocketExtensionDeflate -> Bool
Eq)

instance SP.ManagedPtrNewtype WebsocketExtensionDeflate where
    toManagedPtr :: WebsocketExtensionDeflate -> ManagedPtr WebsocketExtensionDeflate
toManagedPtr (WebsocketExtensionDeflate ManagedPtr WebsocketExtensionDeflate
p) = ManagedPtr WebsocketExtensionDeflate
p

foreign import ccall "soup_websocket_extension_deflate_get_type"
    c_soup_websocket_extension_deflate_get_type :: IO B.Types.GType

instance B.Types.TypedObject WebsocketExtensionDeflate where
    glibType :: IO GType
glibType = IO GType
c_soup_websocket_extension_deflate_get_type

instance B.Types.GObject WebsocketExtensionDeflate

-- | Type class for types which can be safely cast to `WebsocketExtensionDeflate`, for instance with `toWebsocketExtensionDeflate`.
class (SP.GObject o, O.IsDescendantOf WebsocketExtensionDeflate o) => IsWebsocketExtensionDeflate o
instance (SP.GObject o, O.IsDescendantOf WebsocketExtensionDeflate o) => IsWebsocketExtensionDeflate o

instance O.HasParentTypes WebsocketExtensionDeflate
type instance O.ParentTypes WebsocketExtensionDeflate = '[Soup.WebsocketExtension.WebsocketExtension, GObject.Object.Object]

-- | Cast to `WebsocketExtensionDeflate`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toWebsocketExtensionDeflate :: (MIO.MonadIO m, IsWebsocketExtensionDeflate o) => o -> m WebsocketExtensionDeflate
toWebsocketExtensionDeflate :: forall (m :: * -> *) o.
(MonadIO m, IsWebsocketExtensionDeflate o) =>
o -> m WebsocketExtensionDeflate
toWebsocketExtensionDeflate = IO WebsocketExtensionDeflate -> m WebsocketExtensionDeflate
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO WebsocketExtensionDeflate -> m WebsocketExtensionDeflate)
-> (o -> IO WebsocketExtensionDeflate)
-> o
-> m WebsocketExtensionDeflate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr WebsocketExtensionDeflate -> WebsocketExtensionDeflate)
-> o -> IO WebsocketExtensionDeflate
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr WebsocketExtensionDeflate -> WebsocketExtensionDeflate
WebsocketExtensionDeflate

-- | Convert 'WebsocketExtensionDeflate' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe WebsocketExtensionDeflate) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_soup_websocket_extension_deflate_get_type
    gvalueSet_ :: Ptr GValue -> Maybe WebsocketExtensionDeflate -> IO ()
gvalueSet_ Ptr GValue
gv Maybe WebsocketExtensionDeflate
P.Nothing = Ptr GValue -> Ptr WebsocketExtensionDeflate -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr WebsocketExtensionDeflate
forall a. Ptr a
FP.nullPtr :: FP.Ptr WebsocketExtensionDeflate)
    gvalueSet_ Ptr GValue
gv (P.Just WebsocketExtensionDeflate
obj) = WebsocketExtensionDeflate
-> (Ptr WebsocketExtensionDeflate -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr WebsocketExtensionDeflate
obj (Ptr GValue -> Ptr WebsocketExtensionDeflate -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe WebsocketExtensionDeflate)
gvalueGet_ Ptr GValue
gv = do
        Ptr WebsocketExtensionDeflate
ptr <- Ptr GValue -> IO (Ptr WebsocketExtensionDeflate)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr WebsocketExtensionDeflate)
        if Ptr WebsocketExtensionDeflate
ptr Ptr WebsocketExtensionDeflate
-> Ptr WebsocketExtensionDeflate -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr WebsocketExtensionDeflate
forall a. Ptr a
FP.nullPtr
        then WebsocketExtensionDeflate -> Maybe WebsocketExtensionDeflate
forall a. a -> Maybe a
P.Just (WebsocketExtensionDeflate -> Maybe WebsocketExtensionDeflate)
-> IO WebsocketExtensionDeflate
-> IO (Maybe WebsocketExtensionDeflate)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr WebsocketExtensionDeflate -> WebsocketExtensionDeflate)
-> Ptr WebsocketExtensionDeflate -> IO WebsocketExtensionDeflate
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr WebsocketExtensionDeflate -> WebsocketExtensionDeflate
WebsocketExtensionDeflate Ptr WebsocketExtensionDeflate
ptr
        else Maybe WebsocketExtensionDeflate
-> IO (Maybe WebsocketExtensionDeflate)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe WebsocketExtensionDeflate
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveWebsocketExtensionDeflateMethod (t :: Symbol) (o :: *) :: * where
    ResolveWebsocketExtensionDeflateMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveWebsocketExtensionDeflateMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveWebsocketExtensionDeflateMethod "configure" o = Soup.WebsocketExtension.WebsocketExtensionConfigureMethodInfo
    ResolveWebsocketExtensionDeflateMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveWebsocketExtensionDeflateMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveWebsocketExtensionDeflateMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveWebsocketExtensionDeflateMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveWebsocketExtensionDeflateMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveWebsocketExtensionDeflateMethod "processIncomingMessage" o = Soup.WebsocketExtension.WebsocketExtensionProcessIncomingMessageMethodInfo
    ResolveWebsocketExtensionDeflateMethod "processOutgoingMessage" o = Soup.WebsocketExtension.WebsocketExtensionProcessOutgoingMessageMethodInfo
    ResolveWebsocketExtensionDeflateMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveWebsocketExtensionDeflateMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveWebsocketExtensionDeflateMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveWebsocketExtensionDeflateMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveWebsocketExtensionDeflateMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveWebsocketExtensionDeflateMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveWebsocketExtensionDeflateMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveWebsocketExtensionDeflateMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getRequestParams" o = Soup.WebsocketExtension.WebsocketExtensionGetRequestParamsMethodInfo
    ResolveWebsocketExtensionDeflateMethod "getResponseParams" o = Soup.WebsocketExtension.WebsocketExtensionGetResponseParamsMethodInfo
    ResolveWebsocketExtensionDeflateMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveWebsocketExtensionDeflateMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveWebsocketExtensionDeflateMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveWebsocketExtensionDeflateMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveWebsocketExtensionDeflateMethod t WebsocketExtensionDeflate, O.OverloadedMethod info WebsocketExtensionDeflate p) => OL.IsLabel t (WebsocketExtensionDeflate -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveWebsocketExtensionDeflateMethod t WebsocketExtensionDeflate, O.OverloadedMethod info WebsocketExtensionDeflate p, R.HasField t WebsocketExtensionDeflate p) => R.HasField t WebsocketExtensionDeflate p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveWebsocketExtensionDeflateMethod t WebsocketExtensionDeflate, O.OverloadedMethodInfo info WebsocketExtensionDeflate) => OL.IsLabel t (O.MethodProxy info WebsocketExtensionDeflate) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList WebsocketExtensionDeflate
type instance O.AttributeList WebsocketExtensionDeflate = WebsocketExtensionDeflateAttributeList
type WebsocketExtensionDeflateAttributeList = ('[ ] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList WebsocketExtensionDeflate = WebsocketExtensionDeflateSignalList
type WebsocketExtensionDeflateSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif