{- |
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.WebKit2.Objects.FaviconDatabase
    (

-- * Exported types
    FaviconDatabase(..)                     ,
    IsFaviconDatabase                       ,
    toFaviconDatabase                       ,
    noFaviconDatabase                       ,


 -- * Methods
-- ** clear #method:clear#

#if ENABLE_OVERLOADING
    FaviconDatabaseClearMethodInfo          ,
#endif
    faviconDatabaseClear                    ,


-- ** getFavicon #method:getFavicon#

#if ENABLE_OVERLOADING
    FaviconDatabaseGetFaviconMethodInfo     ,
#endif
    faviconDatabaseGetFavicon               ,


-- ** getFaviconFinish #method:getFaviconFinish#

#if ENABLE_OVERLOADING
    FaviconDatabaseGetFaviconFinishMethodInfo,
#endif
    faviconDatabaseGetFaviconFinish         ,


-- ** getFaviconUri #method:getFaviconUri#

#if ENABLE_OVERLOADING
    FaviconDatabaseGetFaviconUriMethodInfo  ,
#endif
    faviconDatabaseGetFaviconUri            ,




 -- * Signals
-- ** faviconChanged #signal:faviconChanged#

    C_FaviconDatabaseFaviconChangedCallback ,
    FaviconDatabaseFaviconChangedCallback   ,
#if ENABLE_OVERLOADING
    FaviconDatabaseFaviconChangedSignalInfo ,
#endif
    afterFaviconDatabaseFaviconChanged      ,
    genClosure_FaviconDatabaseFaviconChanged,
    mk_FaviconDatabaseFaviconChangedCallback,
    noFaviconDatabaseFaviconChangedCallback ,
    onFaviconDatabaseFaviconChanged         ,
    wrap_FaviconDatabaseFaviconChangedCallback,




    ) 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.Cairo.Structs.Surface as Cairo.Surface
import qualified GI.GObject.Objects.Object as GObject.Object
import qualified GI.Gio.Callbacks as Gio.Callbacks
import qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import qualified GI.Gio.Objects.Cancellable as Gio.Cancellable

-- | Memory-managed wrapper type.
newtype FaviconDatabase = FaviconDatabase (ManagedPtr FaviconDatabase)
foreign import ccall "webkit_favicon_database_get_type"
    c_webkit_favicon_database_get_type :: IO GType

instance GObject FaviconDatabase where
    gobjectType = c_webkit_favicon_database_get_type


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

instance O.HasParentTypes FaviconDatabase
type instance O.ParentTypes FaviconDatabase = '[GObject.Object.Object]

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

-- | A convenience alias for `Nothing` :: `Maybe` `FaviconDatabase`.
noFaviconDatabase :: Maybe FaviconDatabase
noFaviconDatabase = Nothing

#if ENABLE_OVERLOADING
type family ResolveFaviconDatabaseMethod (t :: Symbol) (o :: *) :: * where
    ResolveFaviconDatabaseMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveFaviconDatabaseMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveFaviconDatabaseMethod "clear" o = FaviconDatabaseClearMethodInfo
    ResolveFaviconDatabaseMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveFaviconDatabaseMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveFaviconDatabaseMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveFaviconDatabaseMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveFaviconDatabaseMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveFaviconDatabaseMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveFaviconDatabaseMethod "ref" o = GObject.Object.ObjectRefMethodInfo
    ResolveFaviconDatabaseMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveFaviconDatabaseMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveFaviconDatabaseMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveFaviconDatabaseMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveFaviconDatabaseMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveFaviconDatabaseMethod "unref" o = GObject.Object.ObjectUnrefMethodInfo
    ResolveFaviconDatabaseMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveFaviconDatabaseMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveFaviconDatabaseMethod "getFavicon" o = FaviconDatabaseGetFaviconMethodInfo
    ResolveFaviconDatabaseMethod "getFaviconFinish" o = FaviconDatabaseGetFaviconFinishMethodInfo
    ResolveFaviconDatabaseMethod "getFaviconUri" o = FaviconDatabaseGetFaviconUriMethodInfo
    ResolveFaviconDatabaseMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveFaviconDatabaseMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveFaviconDatabaseMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveFaviconDatabaseMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveFaviconDatabaseMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveFaviconDatabaseMethod t FaviconDatabase, O.MethodInfo info FaviconDatabase p) => OL.IsLabel t (FaviconDatabase -> 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

-- signal FaviconDatabase::favicon-changed
{- |
This signal is emitted when the favicon URI of /@pageUri@/ has
been changed to /@faviconUri@/ in the database. You can connect
to this signal and call 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon'
to get the favicon. If you are interested in the favicon of a
'GI.WebKit2.Objects.WebView.WebView' it\'s easier to use the 'GI.WebKit2.Objects.WebView.WebView':@/favicon/@
property. See 'GI.WebKit2.Objects.WebView.webViewGetFavicon' for more details.
-}
type FaviconDatabaseFaviconChangedCallback =
    T.Text
    {- ^ /@pageUri@/: the URI of the Web page containing the icon -}
    -> T.Text
    {- ^ /@faviconUri@/: the URI of the favicon -}
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `FaviconDatabaseFaviconChangedCallback`@.
noFaviconDatabaseFaviconChangedCallback :: Maybe FaviconDatabaseFaviconChangedCallback
noFaviconDatabaseFaviconChangedCallback = Nothing

-- | Type for the callback on the (unwrapped) C side.
type C_FaviconDatabaseFaviconChangedCallback =
    Ptr () ->                               -- object
    CString ->
    CString ->
    Ptr () ->                               -- user_data
    IO ()

-- | Generate a function pointer callable from C code, from a `C_FaviconDatabaseFaviconChangedCallback`.
foreign import ccall "wrapper"
    mk_FaviconDatabaseFaviconChangedCallback :: C_FaviconDatabaseFaviconChangedCallback -> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)

-- | Wrap the callback into a `GClosure`.
genClosure_FaviconDatabaseFaviconChanged :: MonadIO m => FaviconDatabaseFaviconChangedCallback -> m (GClosure C_FaviconDatabaseFaviconChangedCallback)
genClosure_FaviconDatabaseFaviconChanged cb = liftIO $ do
    let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
    mk_FaviconDatabaseFaviconChangedCallback cb' >>= B.GClosure.newGClosure


-- | Wrap a `FaviconDatabaseFaviconChangedCallback` into a `C_FaviconDatabaseFaviconChangedCallback`.
wrap_FaviconDatabaseFaviconChangedCallback ::
    FaviconDatabaseFaviconChangedCallback ->
    C_FaviconDatabaseFaviconChangedCallback
wrap_FaviconDatabaseFaviconChangedCallback _cb _ pageUri faviconUri _ = do
    pageUri' <- cstringToText pageUri
    faviconUri' <- cstringToText faviconUri
    _cb  pageUri' faviconUri'


{- |
Connect a signal handler for the “@favicon-changed@” signal, to be run before the default handler.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Signals.on' faviconDatabase #faviconChanged callback
@
-}
onFaviconDatabaseFaviconChanged :: (IsFaviconDatabase a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
onFaviconDatabaseFaviconChanged obj cb = liftIO $ do
    let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
    cb'' <- mk_FaviconDatabaseFaviconChangedCallback cb'
    connectSignalFunPtr obj "favicon-changed" cb'' SignalConnectBefore

{- |
Connect a signal handler for the “@favicon-changed@” signal, to be run after the default handler.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Signals.after' faviconDatabase #faviconChanged callback
@
-}
afterFaviconDatabaseFaviconChanged :: (IsFaviconDatabase a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
afterFaviconDatabaseFaviconChanged obj cb = liftIO $ do
    let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
    cb'' <- mk_FaviconDatabaseFaviconChangedCallback cb'
    connectSignalFunPtr obj "favicon-changed" cb'' SignalConnectAfter


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

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
data FaviconDatabaseFaviconChangedSignalInfo
instance SignalInfo FaviconDatabaseFaviconChangedSignalInfo where
    type HaskellCallbackType FaviconDatabaseFaviconChangedSignalInfo = FaviconDatabaseFaviconChangedCallback
    connectSignal _ obj cb connectMode = do
        let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
        cb'' <- mk_FaviconDatabaseFaviconChangedCallback cb'
        connectSignalFunPtr obj "favicon-changed" cb'' connectMode

type instance O.SignalList FaviconDatabase = FaviconDatabaseSignalList
type FaviconDatabaseSignalList = ('[ '("faviconChanged", FaviconDatabaseFaviconChangedSignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method FaviconDatabase::clear
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "database", argType = TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitFaviconDatabase", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_favicon_database_clear" webkit_favicon_database_clear ::
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    IO ()

{- |
Clears all icons from the database.
-}
faviconDatabaseClear ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a) =>
    a
    {- ^ /@database@/: a 'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase' -}
    -> m ()
faviconDatabaseClear database = liftIO $ do
    database' <- unsafeManagedPtrCastPtr database
    webkit_favicon_database_clear database'
    touchManagedPtr database
    return ()

#if ENABLE_OVERLOADING
data FaviconDatabaseClearMethodInfo
instance (signature ~ (m ()), MonadIO m, IsFaviconDatabase a) => O.MethodInfo FaviconDatabaseClearMethodInfo a signature where
    overloadedMethod _ = faviconDatabaseClear

#endif

-- method FaviconDatabase::get_favicon
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "database", argType = TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitFaviconDatabase", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "page_uri", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "URI of the page for which we want to retrieve the favicon", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GCancellable or %NULL.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GAsyncReadyCallback to call when the request is\n           satisfied or %NULL if you don't care about the result.", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 4, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "The data to pass to @callback.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "webkit_favicon_database_get_favicon" webkit_favicon_database_get_favicon ::
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    CString ->                              -- page_uri : TBasicType TUTF8
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

{- |
Asynchronously obtains a 'GI.Cairo.Structs.Surface.Surface' of the favicon for the
given page URI. It returns the cached icon if it\'s in the database
asynchronously waiting for the icon to be read from the database.

This is an asynchronous method. When the operation is finished, callback will
be invoked. You can then call 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconFinish'
to get the result of the operation.

You must call 'GI.WebKit2.Objects.WebContext.webContextSetFaviconDatabaseDirectory' for
the 'GI.WebKit2.Objects.WebContext.WebContext' associated with this 'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase'
before attempting to use this function; otherwise,
'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFaviconFinish' will return
'GI.WebKit2.Enums.FaviconDatabaseErrorNotInitialized'.
-}
faviconDatabaseGetFavicon ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a, Gio.Cancellable.IsCancellable b) =>
    a
    {- ^ /@database@/: a 'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase' -}
    -> T.Text
    {- ^ /@pageUri@/: URI of the page for which we want to retrieve the favicon -}
    -> Maybe (b)
    {- ^ /@cancellable@/: A 'GI.Gio.Objects.Cancellable.Cancellable' or 'Nothing'. -}
    -> Maybe (Gio.Callbacks.AsyncReadyCallback)
    {- ^ /@callback@/: A 'GI.Gio.Callbacks.AsyncReadyCallback' to call when the request is
           satisfied or 'Nothing' if you don\'t care about the result. -}
    -> m ()
faviconDatabaseGetFavicon database pageUri cancellable callback = liftIO $ do
    database' <- unsafeManagedPtrCastPtr database
    pageUri' <- textToCString pageUri
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    maybeCallback <- case callback of
        Nothing -> return (castPtrToFunPtr nullPtr)
        Just jCallback -> do
            ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
            jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback))
            poke ptrcallback jCallback'
            return jCallback'
    let userData = nullPtr
    webkit_favicon_database_get_favicon database' pageUri' maybeCancellable maybeCallback userData
    touchManagedPtr database
    whenJust cancellable touchManagedPtr
    freeMem pageUri'
    return ()

#if ENABLE_OVERLOADING
data FaviconDatabaseGetFaviconMethodInfo
instance (signature ~ (T.Text -> Maybe (b) -> Maybe (Gio.Callbacks.AsyncReadyCallback) -> m ()), MonadIO m, IsFaviconDatabase a, Gio.Cancellable.IsCancellable b) => O.MethodInfo FaviconDatabaseGetFaviconMethodInfo a signature where
    overloadedMethod _ = faviconDatabaseGetFavicon

#endif

-- method FaviconDatabase::get_favicon_finish
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "database", argType = TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitFaviconDatabase", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GAsyncResult obtained from the #GAsyncReadyCallback passed to webkit_favicon_database_get_favicon()", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "cairo", name = "Surface"}))
-- throws : True
-- Skip return : False

foreign import ccall "webkit_favicon_database_get_favicon_finish" webkit_favicon_database_get_favicon_finish ::
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    Ptr Gio.AsyncResult.AsyncResult ->      -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr Cairo.Surface.Surface)

{- |
Finishes an operation started with 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon'.
-}
faviconDatabaseGetFaviconFinish ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a, Gio.AsyncResult.IsAsyncResult b) =>
    a
    {- ^ /@database@/: a 'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase' -}
    -> b
    {- ^ /@result@/: A 'GI.Gio.Interfaces.AsyncResult.AsyncResult' obtained from the 'GI.Gio.Callbacks.AsyncReadyCallback' passed to 'GI.WebKit2.Objects.FaviconDatabase.faviconDatabaseGetFavicon' -}
    -> m Cairo.Surface.Surface
    {- ^ __Returns:__ a new reference to a 'GI.Cairo.Structs.Surface.Surface', or
'Nothing' in case of error. /(Can throw 'Data.GI.Base.GError.GError')/ -}
faviconDatabaseGetFaviconFinish database result_ = liftIO $ do
    database' <- unsafeManagedPtrCastPtr database
    result_' <- unsafeManagedPtrCastPtr result_
    onException (do
        result <- propagateGError $ webkit_favicon_database_get_favicon_finish database' result_'
        checkUnexpectedReturnNULL "faviconDatabaseGetFaviconFinish" result
        result' <- (wrapBoxed Cairo.Surface.Surface) result
        touchManagedPtr database
        touchManagedPtr result_
        return result'
     ) (do
        return ()
     )

#if ENABLE_OVERLOADING
data FaviconDatabaseGetFaviconFinishMethodInfo
instance (signature ~ (b -> m Cairo.Surface.Surface), MonadIO m, IsFaviconDatabase a, Gio.AsyncResult.IsAsyncResult b) => O.MethodInfo FaviconDatabaseGetFaviconFinishMethodInfo a signature where
    overloadedMethod _ = faviconDatabaseGetFaviconFinish

#endif

-- method FaviconDatabase::get_favicon_uri
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "database", argType = TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #WebKitFaviconDatabase", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "page_uri", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "URI of the page containing the icon", 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_favicon_database_get_favicon_uri" webkit_favicon_database_get_favicon_uri ::
    Ptr FaviconDatabase ->                  -- database : TInterface (Name {namespace = "WebKit2", name = "FaviconDatabase"})
    CString ->                              -- page_uri : TBasicType TUTF8
    IO CString

{- |
Obtains the URI of the favicon for the given /@pageUri@/.
-}
faviconDatabaseGetFaviconUri ::
    (B.CallStack.HasCallStack, MonadIO m, IsFaviconDatabase a) =>
    a
    {- ^ /@database@/: a 'GI.WebKit2.Objects.FaviconDatabase.FaviconDatabase' -}
    -> T.Text
    {- ^ /@pageUri@/: URI of the page containing the icon -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ a newly allocated URI for the favicon, or 'Nothing' if the
database doesn\'t have a favicon for /@pageUri@/. -}
faviconDatabaseGetFaviconUri database pageUri = liftIO $ do
    database' <- unsafeManagedPtrCastPtr database
    pageUri' <- textToCString pageUri
    result <- webkit_favicon_database_get_favicon_uri database' pageUri'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        freeMem result'
        return result''
    touchManagedPtr database
    freeMem pageUri'
    return maybeResult

#if ENABLE_OVERLOADING
data FaviconDatabaseGetFaviconUriMethodInfo
instance (signature ~ (T.Text -> m (Maybe T.Text)), MonadIO m, IsFaviconDatabase a) => O.MethodInfo FaviconDatabaseGetFaviconUriMethodInfo a signature where
    overloadedMethod _ = faviconDatabaseGetFaviconUri

#endif