{- |
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.WebKit2WebExtension.Objects.DOMXPathExpression
    ( 

-- * Exported types
    DOMXPathExpression(..)                  ,
    IsDOMXPathExpression                    ,
    toDOMXPathExpression                    ,
    noDOMXPathExpression                    ,


 -- * Methods
-- ** evaluate #method:evaluate#
    DOMXPathExpressionEvaluateMethodInfo    ,
    dOMXPathExpressionEvaluate              ,




    ) 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.WebKit2WebExtension.Objects.DOMNode as WebKit2WebExtension.DOMNode
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.DOMObject as WebKit2WebExtension.DOMObject
import {-# SOURCE #-} qualified GI.WebKit2WebExtension.Objects.DOMXPathResult as WebKit2WebExtension.DOMXPathResult

newtype DOMXPathExpression = DOMXPathExpression (ManagedPtr DOMXPathExpression)
foreign import ccall "webkit_dom_xpath_expression_get_type"
    c_webkit_dom_xpath_expression_get_type :: IO GType

instance GObject DOMXPathExpression where
    gobjectType _ = c_webkit_dom_xpath_expression_get_type
    

class GObject o => IsDOMXPathExpression o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError DOMXPathExpression a) =>
    IsDOMXPathExpression a
#endif
instance IsDOMXPathExpression DOMXPathExpression
instance WebKit2WebExtension.DOMObject.IsDOMObject DOMXPathExpression
instance GObject.Object.IsObject DOMXPathExpression

toDOMXPathExpression :: IsDOMXPathExpression o => o -> IO DOMXPathExpression
toDOMXPathExpression = unsafeCastTo DOMXPathExpression

noDOMXPathExpression :: Maybe DOMXPathExpression
noDOMXPathExpression = Nothing

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

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

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

instance O.HasAttributeList DOMXPathExpression
type instance O.AttributeList DOMXPathExpression = DOMXPathExpressionAttributeList
type DOMXPathExpressionAttributeList = ('[ '("coreObject", WebKit2WebExtension.DOMObject.DOMObjectCoreObjectPropertyInfo)] :: [(Symbol, *)])

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

-- method DOMXPathExpression::evaluate
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMXPathExpression"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMXPathExpression", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "contextNode", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMNode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMNode", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "type", argType = TBasicType TUInt16, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #gushort", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "inResult", argType = TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMXPathResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMXPathResult", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMXPathResult"}))
-- throws : True
-- Skip return : False

foreign import ccall "webkit_dom_xpath_expression_evaluate" webkit_dom_xpath_expression_evaluate :: 
    Ptr DOMXPathExpression ->               -- self : TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMXPathExpression"})
    Ptr WebKit2WebExtension.DOMNode.DOMNode -> -- contextNode : TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMNode"})
    Word16 ->                               -- type : TBasicType TUInt16
    Ptr WebKit2WebExtension.DOMXPathResult.DOMXPathResult -> -- inResult : TInterface (Name {namespace = "WebKit2WebExtension", name = "DOMXPathResult"})
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr WebKit2WebExtension.DOMXPathResult.DOMXPathResult)

{- |
/No description available in the introspection data./
-}
dOMXPathExpressionEvaluate ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMXPathExpression a, WebKit2WebExtension.DOMNode.IsDOMNode b, WebKit2WebExtension.DOMXPathResult.IsDOMXPathResult c) =>
    a
    {- ^ /@self@/: A 'GI.WebKit2WebExtension.Objects.DOMXPathExpression.DOMXPathExpression' -}
    -> b
    {- ^ /@contextNode@/: A 'GI.WebKit2WebExtension.Objects.DOMNode.DOMNode' -}
    -> Word16
    {- ^ /@type@/: A @/gushort/@ -}
    -> c
    {- ^ /@inResult@/: A 'GI.WebKit2WebExtension.Objects.DOMXPathResult.DOMXPathResult' -}
    -> m WebKit2WebExtension.DOMXPathResult.DOMXPathResult
    {- ^ __Returns:__ A 'GI.WebKit2WebExtension.Objects.DOMXPathResult.DOMXPathResult' /(Can throw 'Data.GI.Base.GError.GError')/ -}
dOMXPathExpressionEvaluate self contextNode type_ inResult = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    contextNode' <- unsafeManagedPtrCastPtr contextNode
    inResult' <- unsafeManagedPtrCastPtr inResult
    onException (do
        result <- propagateGError $ webkit_dom_xpath_expression_evaluate self' contextNode' type_ inResult'
        checkUnexpectedReturnNULL "dOMXPathExpressionEvaluate" result
        result' <- (wrapObject WebKit2WebExtension.DOMXPathResult.DOMXPathResult) result
        touchManagedPtr self
        touchManagedPtr contextNode
        touchManagedPtr inResult
        return result'
     ) (do
        return ()
     )

data DOMXPathExpressionEvaluateMethodInfo
instance (signature ~ (b -> Word16 -> c -> m WebKit2WebExtension.DOMXPathResult.DOMXPathResult), MonadIO m, IsDOMXPathExpression a, WebKit2WebExtension.DOMNode.IsDOMNode b, WebKit2WebExtension.DOMXPathResult.IsDOMXPathResult c) => O.MethodInfo DOMXPathExpressionEvaluateMethodInfo a signature where
    overloadedMethod _ = dOMXPathExpressionEvaluate