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

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


 -- * Methods
-- ** clear #method:clear#
    FaviconDatabaseClearMethodInfo          ,
    faviconDatabaseClear                    ,


-- ** getFavicon #method:getFavicon#
    FaviconDatabaseGetFaviconMethodInfo     ,
    faviconDatabaseGetFavicon               ,


-- ** getFaviconFinish #method:getFaviconFinish#
    FaviconDatabaseGetFaviconFinishMethodInfo,
    faviconDatabaseGetFaviconFinish         ,


-- ** getFaviconUri #method:getFaviconUri#
    FaviconDatabaseGetFaviconUriMethodInfo  ,
    faviconDatabaseGetFaviconUri            ,




 -- * Signals
-- ** faviconChanged #signal:faviconChanged#
    C_FaviconDatabaseFaviconChangedCallback ,
    FaviconDatabaseFaviconChangedCallback   ,
    FaviconDatabaseFaviconChangedSignalInfo ,
    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.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.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

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
    

class GObject o => IsFaviconDatabase o
#if MIN_VERSION_base(4,9,0)
instance {-# OVERLAPPABLE #-} (GObject a, O.UnknownAncestorError FaviconDatabase a) =>
    IsFaviconDatabase a
#endif
instance IsFaviconDatabase FaviconDatabase
instance GObject.Object.IsObject FaviconDatabase

toFaviconDatabase :: IsFaviconDatabase o => o -> IO FaviconDatabase
toFaviconDatabase = unsafeCastTo FaviconDatabase

noFaviconDatabase :: Maybe FaviconDatabase
noFaviconDatabase = Nothing

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 "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 "replaceData" o = GObject.Object.ObjectReplaceDataMethodInfo
    ResolveFaviconDatabaseMethod "replaceQdata" o = GObject.Object.ObjectReplaceQdataMethodInfo
    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) => O.IsLabelProxy t (FaviconDatabase -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

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

-- signal FaviconDatabase::favicon-changed
type FaviconDatabaseFaviconChangedCallback =
    T.Text ->
    T.Text ->
    IO ()

noFaviconDatabaseFaviconChangedCallback :: Maybe FaviconDatabaseFaviconChangedCallback
noFaviconDatabaseFaviconChangedCallback = Nothing

type C_FaviconDatabaseFaviconChangedCallback =
    Ptr () ->                               -- object
    CString ->
    CString ->
    Ptr () ->                               -- user_data
    IO ()

foreign import ccall "wrapper"
    mk_FaviconDatabaseFaviconChangedCallback :: C_FaviconDatabaseFaviconChangedCallback -> IO (FunPtr C_FaviconDatabaseFaviconChangedCallback)

genClosure_FaviconDatabaseFaviconChanged :: FaviconDatabaseFaviconChangedCallback -> IO Closure
genClosure_FaviconDatabaseFaviconChanged cb = do
    let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
    mk_FaviconDatabaseFaviconChangedCallback cb' >>= newCClosure


wrap_FaviconDatabaseFaviconChangedCallback ::
    FaviconDatabaseFaviconChangedCallback ->
    Ptr () ->
    CString ->
    CString ->
    Ptr () ->
    IO ()
wrap_FaviconDatabaseFaviconChangedCallback _cb _ pageUri faviconUri _ = do
    pageUri' <- cstringToText pageUri
    faviconUri' <- cstringToText faviconUri
    _cb  pageUri' faviconUri'


onFaviconDatabaseFaviconChanged :: (GObject a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
onFaviconDatabaseFaviconChanged obj cb = liftIO $ connectFaviconDatabaseFaviconChanged obj cb SignalConnectBefore
afterFaviconDatabaseFaviconChanged :: (GObject a, MonadIO m) => a -> FaviconDatabaseFaviconChangedCallback -> m SignalHandlerId
afterFaviconDatabaseFaviconChanged obj cb = connectFaviconDatabaseFaviconChanged obj cb SignalConnectAfter

connectFaviconDatabaseFaviconChanged :: (GObject a, MonadIO m) =>
                                        a -> FaviconDatabaseFaviconChangedCallback -> SignalConnectMode -> m SignalHandlerId
connectFaviconDatabaseFaviconChanged obj cb after = liftIO $ do
    let cb' = wrap_FaviconDatabaseFaviconChangedCallback cb
    cb'' <- mk_FaviconDatabaseFaviconChangedCallback cb'
    connectSignalFunPtr obj "favicon-changed" cb'' after

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

data FaviconDatabaseFaviconChangedSignalInfo
instance SignalInfo FaviconDatabaseFaviconChangedSignalInfo where
    type HaskellCallbackType FaviconDatabaseFaviconChangedSignalInfo = FaviconDatabaseFaviconChangedCallback
    connectSignal _ = connectFaviconDatabaseFaviconChanged

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

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

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

-- 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'
    ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
    maybeCallback <- case callback of
        Nothing -> return (castPtrToFunPtr nullPtr)
        Just jCallback -> do
            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 ()

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

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

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

-- 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 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'
    checkUnexpectedReturnNULL "faviconDatabaseGetFaviconUri" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr database
    freeMem pageUri'
    return result'

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