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

/No description available in the introspection data./
-}

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

module GI.WebKit2WebExtension.Objects.DOMXPathExpression
    (

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


 -- * Methods
-- ** evaluate #method:evaluate#

#if ENABLE_OVERLOADING
    DOMXPathExpressionEvaluateMethodInfo    ,
#endif
    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.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

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

-- | Memory-managed wrapper type.
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


-- | Type class for types which can be safely cast to `DOMXPathExpression`, for instance with `toDOMXPathExpression`.
class (GObject o, O.IsDescendantOf DOMXPathExpression o) => IsDOMXPathExpression o
instance (GObject o, O.IsDescendantOf DOMXPathExpression o) => IsDOMXPathExpression o

instance O.HasParentTypes DOMXPathExpression
type instance O.ParentTypes DOMXPathExpression = '[WebKit2WebExtension.DOMObject.DOMObject, GObject.Object.Object]

-- | Cast to `DOMXPathExpression`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toDOMXPathExpression :: (MonadIO m, IsDOMXPathExpression o) => o -> m DOMXPathExpression
toDOMXPathExpression = liftIO . unsafeCastTo DOMXPathExpression

-- | A convenience alias for `Nothing` :: `Maybe` `DOMXPathExpression`.
noDOMXPathExpression :: Maybe DOMXPathExpression
noDOMXPathExpression = Nothing

#if ENABLE_OVERLOADING
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 "getv" o = GObject.Object.ObjectGetvMethodInfo
    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 "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 "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveDOMXPathExpressionMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveDOMXPathExpressionMethod l o = O.MethodResolutionFailed l o

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

#endif

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

#if ENABLE_OVERLOADING
#endif

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

#endif

-- 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)

{-# DEPRECATED dOMXPathExpressionEvaluate ["(Since version 2.22)","Use JavaScriptCore API instead"] #-}
{- |
/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 ()
     )

#if ENABLE_OVERLOADING
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

#endif