-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria

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

module GI.WebKit2.Callbacks
    ( 

 -- * Signals


-- ** URISchemeRequestCallback #signal:URISchemeRequestCallback#

    C_URISchemeRequestCallback              ,
    URISchemeRequestCallback                ,
    URISchemeRequestCallback_WithClosures   ,
    drop_closures_URISchemeRequestCallback  ,
    dynamic_URISchemeRequestCallback        ,
    genClosure_URISchemeRequestCallback     ,
    mk_URISchemeRequestCallback             ,
    noURISchemeRequestCallback              ,
    noURISchemeRequestCallback_WithClosures ,
    wrap_URISchemeRequestCallback           ,




    ) 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.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
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.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
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 GHC.Records as R

import {-# SOURCE #-} qualified GI.WebKit2.Objects.URISchemeRequest as WebKit2.URISchemeRequest

-- callback URISchemeRequestCallback
{- Callable
  { returnType = Nothing
  , returnMayBeNull = False
  , returnTransfer = TransferNothing
  , returnDocumentation =
      Documentation { rawDocText = Nothing , sinceVersion = Nothing }
  , args =
      [ Arg
          { argCName = "request"
          , argType =
              TInterface
                Name { namespace = "WebKit2" , name = "URISchemeRequest" }
          , direction = DirectionIn
          , mayBeNull = False
          , argDoc =
              Documentation
                { rawDocText = Just "the #WebKitURISchemeRequest"
                , sinceVersion = Nothing
                }
          , argScope = ScopeTypeInvalid
          , argClosure = -1
          , argDestroy = -1
          , argCallerAllocates = False
          , transfer = TransferNothing
          }
      , Arg
          { argCName = "user_data"
          , argType = TBasicType TPtr
          , direction = DirectionIn
          , mayBeNull = True
          , argDoc =
              Documentation
                { rawDocText = Just "user data passed to the callback"
                , sinceVersion = Nothing
                }
          , argScope = ScopeTypeInvalid
          , argClosure = 1
          , argDestroy = -1
          , argCallerAllocates = False
          , transfer = TransferNothing
          }
      ]
  , skipReturn = False
  , callableThrows = False
  , callableDeprecated = Nothing
  , callableDocumentation =
      Documentation
        { rawDocText =
            Just
              "Type definition for a function that will be called back when an URI request is\nmade for a user registered URI scheme."
        , sinceVersion = Nothing
        }
  , callableResolvable = Nothing
  }
-}
-- | Type for the callback on the (unwrapped) C side.
type C_URISchemeRequestCallback =
    Ptr WebKit2.URISchemeRequest.URISchemeRequest ->
    Ptr () ->
    IO ()

-- Args: [ Arg
--           { argCName = "request"
--           , argType =
--               TInterface
--                 Name { namespace = "WebKit2" , name = "URISchemeRequest" }
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "the #WebKitURISchemeRequest"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "user_data"
--           , argType = TBasicType TPtr
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "user data passed to the callback"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = 1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Nothing
-- throws : False
-- Skip return : False

foreign import ccall "dynamic" __dynamic_C_URISchemeRequestCallback :: FunPtr C_URISchemeRequestCallback -> C_URISchemeRequestCallback

-- | Given a pointer to a foreign C function, wrap it into a function callable from Haskell.
dynamic_URISchemeRequestCallback ::
    (B.CallStack.HasCallStack, MonadIO m, WebKit2.URISchemeRequest.IsURISchemeRequest a) =>
    FunPtr C_URISchemeRequestCallback
    -> a
    -- ^ /@request@/: the t'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest'
    -> Ptr ()
    -- ^ /@userData@/: user data passed to the callback
    -> m ()
dynamic_URISchemeRequestCallback :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsURISchemeRequest a) =>
FunPtr C_URISchemeRequestCallback -> a -> Ptr () -> m ()
dynamic_URISchemeRequestCallback FunPtr C_URISchemeRequestCallback
__funPtr a
request Ptr ()
userData = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    Ptr URISchemeRequest
request' <- a -> IO (Ptr URISchemeRequest)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
request
    (FunPtr C_URISchemeRequestCallback -> C_URISchemeRequestCallback
__dynamic_C_URISchemeRequestCallback FunPtr C_URISchemeRequestCallback
__funPtr) Ptr URISchemeRequest
request' Ptr ()
userData
    a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr a
request
    () -> IO ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()

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

-- | Type definition for a function that will be called back when an URI request is
-- made for a user registered URI scheme.
type URISchemeRequestCallback =
    WebKit2.URISchemeRequest.URISchemeRequest
    -- ^ /@request@/: the t'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest'
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `URISchemeRequestCallback`@.
noURISchemeRequestCallback :: Maybe URISchemeRequestCallback
noURISchemeRequestCallback :: Maybe URISchemeRequestCallback
noURISchemeRequestCallback = Maybe URISchemeRequestCallback
forall a. Maybe a
Nothing

-- | Type definition for a function that will be called back when an URI request is
-- made for a user registered URI scheme.
type URISchemeRequestCallback_WithClosures =
    WebKit2.URISchemeRequest.URISchemeRequest
    -- ^ /@request@/: the t'GI.WebKit2.Objects.URISchemeRequest.URISchemeRequest'
    -> Ptr ()
    -- ^ /@userData@/: user data passed to the callback
    -> IO ()

-- | A convenience synonym for @`Nothing` :: `Maybe` `URISchemeRequestCallback_WithClosures`@.
noURISchemeRequestCallback_WithClosures :: Maybe URISchemeRequestCallback_WithClosures
noURISchemeRequestCallback_WithClosures :: Maybe URISchemeRequestCallback_WithClosures
noURISchemeRequestCallback_WithClosures = Maybe URISchemeRequestCallback_WithClosures
forall a. Maybe a
Nothing

-- | A simple wrapper that ignores the closure arguments.
drop_closures_URISchemeRequestCallback :: URISchemeRequestCallback -> URISchemeRequestCallback_WithClosures
drop_closures_URISchemeRequestCallback :: URISchemeRequestCallback -> URISchemeRequestCallback_WithClosures
drop_closures_URISchemeRequestCallback URISchemeRequestCallback
_f URISchemeRequest
request Ptr ()
_ = URISchemeRequestCallback
_f URISchemeRequest
request

-- | Wrap the callback into a `GClosure`.
genClosure_URISchemeRequestCallback :: MonadIO m => URISchemeRequestCallback -> m (GClosure C_URISchemeRequestCallback)
genClosure_URISchemeRequestCallback :: forall (m :: * -> *).
MonadIO m =>
URISchemeRequestCallback -> m (GClosure C_URISchemeRequestCallback)
genClosure_URISchemeRequestCallback URISchemeRequestCallback
cb = IO (GClosure C_URISchemeRequestCallback)
-> m (GClosure C_URISchemeRequestCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (GClosure C_URISchemeRequestCallback)
 -> m (GClosure C_URISchemeRequestCallback))
-> IO (GClosure C_URISchemeRequestCallback)
-> m (GClosure C_URISchemeRequestCallback)
forall a b. (a -> b) -> a -> b
$ do
    let cb' :: URISchemeRequestCallback_WithClosures
cb' = URISchemeRequestCallback -> URISchemeRequestCallback_WithClosures
drop_closures_URISchemeRequestCallback URISchemeRequestCallback
cb
    let cb'' :: C_URISchemeRequestCallback
cb'' = Maybe (Ptr (FunPtr C_URISchemeRequestCallback))
-> URISchemeRequestCallback_WithClosures
-> C_URISchemeRequestCallback
wrap_URISchemeRequestCallback Maybe (Ptr (FunPtr C_URISchemeRequestCallback))
forall a. Maybe a
Nothing URISchemeRequestCallback_WithClosures
cb'
    C_URISchemeRequestCallback
-> IO (FunPtr C_URISchemeRequestCallback)
mk_URISchemeRequestCallback C_URISchemeRequestCallback
cb'' IO (FunPtr C_URISchemeRequestCallback)
-> (FunPtr C_URISchemeRequestCallback
    -> IO (GClosure C_URISchemeRequestCallback))
-> IO (GClosure C_URISchemeRequestCallback)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= FunPtr C_URISchemeRequestCallback
-> IO (GClosure C_URISchemeRequestCallback)
forall (m :: * -> *) a. MonadIO m => FunPtr a -> m (GClosure a)
B.GClosure.newGClosure


-- | Wrap a `URISchemeRequestCallback` into a `C_URISchemeRequestCallback`.
wrap_URISchemeRequestCallback :: 
    Maybe (Ptr (FunPtr C_URISchemeRequestCallback)) ->
    URISchemeRequestCallback_WithClosures ->
    C_URISchemeRequestCallback
wrap_URISchemeRequestCallback :: Maybe (Ptr (FunPtr C_URISchemeRequestCallback))
-> URISchemeRequestCallback_WithClosures
-> C_URISchemeRequestCallback
wrap_URISchemeRequestCallback Maybe (Ptr (FunPtr C_URISchemeRequestCallback))
gi'funptrptr URISchemeRequestCallback_WithClosures
gi'cb Ptr URISchemeRequest
request Ptr ()
userData = do
    URISchemeRequest
request' <- ((ManagedPtr URISchemeRequest -> URISchemeRequest)
-> Ptr URISchemeRequest -> IO URISchemeRequest
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
newObject ManagedPtr URISchemeRequest -> URISchemeRequest
WebKit2.URISchemeRequest.URISchemeRequest) Ptr URISchemeRequest
request
    URISchemeRequestCallback_WithClosures
gi'cb  URISchemeRequest
request' Ptr ()
userData
    Maybe (Ptr (FunPtr C_URISchemeRequestCallback)) -> IO ()
forall a. Maybe (Ptr (FunPtr a)) -> IO ()
maybeReleaseFunPtr Maybe (Ptr (FunPtr C_URISchemeRequestCallback))
gi'funptrptr