{- |
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.DOMDatabase
    ( 

-- * Exported types
    DOMDatabase(..)                         ,
    IsDOMDatabase                           ,
    toDOMDatabase                           ,
    noDOMDatabase                           ,


 -- * Methods
-- ** getVersion #method:getVersion#
    DOMDatabaseGetVersionMethodInfo         ,
    dOMDatabaseGetVersion                   ,




 -- * Properties
-- ** version #attr:version#
    DOMDatabaseVersionPropertyInfo          ,
    dOMDatabaseVersion                      ,
    getDOMDatabaseVersion                   ,




    ) 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.Objects.DOMObject as WebKit.DOMObject

newtype DOMDatabase = DOMDatabase (ManagedPtr DOMDatabase)
foreign import ccall "webkit_dom_database_get_type"
    c_webkit_dom_database_get_type :: IO GType

instance GObject DOMDatabase where
    gobjectType _ = c_webkit_dom_database_get_type
    

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

toDOMDatabase :: IsDOMDatabase o => o -> IO DOMDatabase
toDOMDatabase = unsafeCastTo DOMDatabase

noDOMDatabase :: Maybe DOMDatabase
noDOMDatabase = Nothing

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

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

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

-- VVV Prop "version"
   -- Type: TBasicType TUTF8
   -- Flags: [PropertyReadable]
   -- Nullable: (Nothing,Nothing)

getDOMDatabaseVersion :: (MonadIO m, IsDOMDatabase o) => o -> m (Maybe T.Text)
getDOMDatabaseVersion obj = liftIO $ getObjectPropertyString obj "version"

data DOMDatabaseVersionPropertyInfo
instance AttrInfo DOMDatabaseVersionPropertyInfo where
    type AttrAllowedOps DOMDatabaseVersionPropertyInfo = '[ 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint DOMDatabaseVersionPropertyInfo = (~) ()
    type AttrBaseTypeConstraint DOMDatabaseVersionPropertyInfo = IsDOMDatabase
    type AttrGetType DOMDatabaseVersionPropertyInfo = (Maybe T.Text)
    type AttrLabel DOMDatabaseVersionPropertyInfo = "version"
    type AttrOrigin DOMDatabaseVersionPropertyInfo = DOMDatabase
    attrGet _ = getDOMDatabaseVersion
    attrSet _ = undefined
    attrConstruct _ = undefined
    attrClear _ = undefined

instance O.HasAttributeList DOMDatabase
type instance O.AttributeList DOMDatabase = DOMDatabaseAttributeList
type DOMDatabaseAttributeList = ('[ '("coreObject", WebKit.DOMObject.DOMObjectCoreObjectPropertyInfo), '("version", DOMDatabaseVersionPropertyInfo)] :: [(Symbol, *)])

dOMDatabaseVersion :: AttrLabelProxy "version"
dOMDatabaseVersion = AttrLabelProxy

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

-- method DOMDatabase::get_version
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "self", argType = TInterface (Name {namespace = "WebKit", name = "DOMDatabase"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #WebKitDOMDatabase", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "webkit_dom_database_get_version" webkit_dom_database_get_version :: 
    Ptr DOMDatabase ->                      -- self : TInterface (Name {namespace = "WebKit", name = "DOMDatabase"})
    IO CString

{- |
/No description available in the introspection data./
-}
dOMDatabaseGetVersion ::
    (B.CallStack.HasCallStack, MonadIO m, IsDOMDatabase a) =>
    a
    {- ^ /@self@/: A 'GI.WebKit.Objects.DOMDatabase.DOMDatabase' -}
    -> m T.Text
    {- ^ __Returns:__ A @/gchar/@ -}
dOMDatabaseGetVersion self = liftIO $ do
    self' <- unsafeManagedPtrCastPtr self
    result <- webkit_dom_database_get_version self'
    checkUnexpectedReturnNULL "dOMDatabaseGetVersion" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr self
    return result'

data DOMDatabaseGetVersionMethodInfo
instance (signature ~ (m T.Text), MonadIO m, IsDOMDatabase a) => O.MethodInfo DOMDatabaseGetVersionMethodInfo a signature where
    overloadedMethod _ = dOMDatabaseGetVersion