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

module GI.WebKit.Objects.DOMMessagePort
    ( 

-- * Exported types
    DOMMessagePort(..)                      ,
    IsDOMMessagePort                        ,
    toDOMMessagePort                        ,
    noDOMMessagePort                        ,


    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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 GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.WebKit.Interfaces.DOMEventTarget as WebKit.DOMEventTarget
import {-# SOURCE #-} qualified GI.WebKit.Objects.DOMObject as WebKit.DOMObject

newtype DOMMessagePort = DOMMessagePort (ManagedPtr DOMMessagePort)
foreign import ccall "webkit_dom_message_port_get_type"
    c_webkit_dom_message_port_get_type :: IO GType

instance GObject DOMMessagePort where
    gobjectType _ = c_webkit_dom_message_port_get_type
    

class GObject o => IsDOMMessagePort o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DOMMessagePort a) =>
    IsDOMMessagePort a
#endif
instance IsDOMMessagePort DOMMessagePort
instance WebKit.DOMObject.IsDOMObject DOMMessagePort
instance GObject.Object.IsObject DOMMessagePort
instance WebKit.DOMEventTarget.IsDOMEventTarget DOMMessagePort

toDOMMessagePort :: IsDOMMessagePort o => o -> IO DOMMessagePort
toDOMMessagePort = unsafeCastTo DOMMessagePort

noDOMMessagePort :: Maybe DOMMessagePort
noDOMMessagePort = Nothing

type family ResolveDOMMessagePortMethod (t :: Symbol) (o :: *) :: * where
    ResolveDOMMessagePortMethod "addEventListener" o = WebKit.DOMEventTarget.DOMEventTargetAddEventListenerMethodInfo
    ResolveDOMMessagePortMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveDOMMessagePortMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveDOMMessagePortMethod "dispatchEvent" o = WebKit.DOMEventTarget.DOMEventTargetDispatchEventMethodInfo
    ResolveDOMMessagePortMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveDOMMessagePortMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveDOMMessagePortMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveDOMMessagePortMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveDOMMessagePortMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveDOMMessagePortMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveDOMMessagePortMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveDOMMessagePortMethod "removeEventListener" o = WebKit.DOMEventTarget.DOMEventTargetRemoveEventListenerMethodInfo
    ResolveDOMMessagePortMethod "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveDOMMessagePortMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    ResolveDOMMessagePortMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveDOMMessagePortMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveDOMMessagePortMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveDOMMessagePortMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveDOMMessagePortMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveDOMMessagePortMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveDOMMessagePortMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveDOMMessagePortMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveDOMMessagePortMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveDOMMessagePortMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveDOMMessagePortMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDOMMessagePortMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveDOMMessagePortMethod t DOMMessagePort, O.MethodInfo info DOMMessagePort p) => O.IsLabelProxy t (DOMMessagePort -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveDOMMessagePortMethod t DOMMessagePort, O.MethodInfo info DOMMessagePort p) => O.IsLabel t (DOMMessagePort -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif

instance O.HasAttributeList DOMMessagePort
type instance O.AttributeList DOMMessagePort = DOMMessagePortAttributeList
type DOMMessagePortAttributeList = ('[ '("coreObject", WebKit.DOMObject.DOMObjectCoreObjectPropertyInfo)] :: [(Symbol, *)])

type instance O.SignalList DOMMessagePort = DOMMessagePortSignalList
type DOMMessagePortSignalList = ('[ '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])