{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Tracing modules will subclass t'GI.Gst.Objects.Tracer.Tracer' and register through
-- 'GI.Gst.Objects.Tracer.tracerRegister'. Modules can attach to various hook-types - see
-- 'GI.Gst.Functions.tracingRegisterHook'. When invoked they receive hook specific
-- contextual data, which they must not modify.
-- 
-- /Since: 1.8/

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

module GI.Gst.Objects.Tracer
    ( 

-- * Exported types
    Tracer(..)                              ,
    IsTracer                                ,
    toTracer                                ,


 -- * Methods
-- | 
-- 
--  === __Click to display all available methods, including inherited ones__
-- ==== Methods
-- [addControlBinding]("GI.Gst.Objects.Object#g:method:addControlBinding"), [bindProperty]("GI.GObject.Objects.Object#g:method:bindProperty"), [bindPropertyFull]("GI.GObject.Objects.Object#g:method:bindPropertyFull"), [defaultError]("GI.Gst.Objects.Object#g:method:defaultError"), [forceFloating]("GI.GObject.Objects.Object#g:method:forceFloating"), [freezeNotify]("GI.GObject.Objects.Object#g:method:freezeNotify"), [getv]("GI.GObject.Objects.Object#g:method:getv"), [hasActiveControlBindings]("GI.Gst.Objects.Object#g:method:hasActiveControlBindings"), [hasAncestor]("GI.Gst.Objects.Object#g:method:hasAncestor"), [hasAsAncestor]("GI.Gst.Objects.Object#g:method:hasAsAncestor"), [hasAsParent]("GI.Gst.Objects.Object#g:method:hasAsParent"), [isFloating]("GI.GObject.Objects.Object#g:method:isFloating"), [notify]("GI.GObject.Objects.Object#g:method:notify"), [notifyByPspec]("GI.GObject.Objects.Object#g:method:notifyByPspec"), [ref]("GI.Gst.Objects.Object#g:method:ref"), [refSink]("GI.GObject.Objects.Object#g:method:refSink"), [removeControlBinding]("GI.Gst.Objects.Object#g:method:removeControlBinding"), [runDispose]("GI.GObject.Objects.Object#g:method:runDispose"), [stealData]("GI.GObject.Objects.Object#g:method:stealData"), [stealQdata]("GI.GObject.Objects.Object#g:method:stealQdata"), [suggestNextSync]("GI.Gst.Objects.Object#g:method:suggestNextSync"), [syncValues]("GI.Gst.Objects.Object#g:method:syncValues"), [thawNotify]("GI.GObject.Objects.Object#g:method:thawNotify"), [unparent]("GI.Gst.Objects.Object#g:method:unparent"), [unref]("GI.Gst.Objects.Object#g:method:unref"), [watchClosure]("GI.GObject.Objects.Object#g:method:watchClosure").
-- 
-- ==== Getters
-- [getControlBinding]("GI.Gst.Objects.Object#g:method:getControlBinding"), [getControlRate]("GI.Gst.Objects.Object#g:method:getControlRate"), [getData]("GI.GObject.Objects.Object#g:method:getData"), [getGValueArray]("GI.Gst.Objects.Object#g:method:getGValueArray"), [getName]("GI.Gst.Objects.Object#g:method:getName"), [getParent]("GI.Gst.Objects.Object#g:method:getParent"), [getPathString]("GI.Gst.Objects.Object#g:method:getPathString"), [getProperty]("GI.GObject.Objects.Object#g:method:getProperty"), [getQdata]("GI.GObject.Objects.Object#g:method:getQdata"), [getValue]("GI.Gst.Objects.Object#g:method:getValue").
-- 
-- ==== Setters
-- [setControlBindingDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingDisabled"), [setControlBindingsDisabled]("GI.Gst.Objects.Object#g:method:setControlBindingsDisabled"), [setControlRate]("GI.Gst.Objects.Object#g:method:setControlRate"), [setData]("GI.GObject.Objects.Object#g:method:setData"), [setDataFull]("GI.GObject.Objects.Object#g:method:setDataFull"), [setName]("GI.Gst.Objects.Object#g:method:setName"), [setParent]("GI.Gst.Objects.Object#g:method:setParent"), [setProperty]("GI.GObject.Objects.Object#g:method:setProperty").

#if defined(ENABLE_OVERLOADING)
    ResolveTracerMethod                     ,
#endif

-- ** register #method:register#

    tracerRegister                          ,




 -- * Properties


-- ** params #attr:params#
-- | /No description available in the introspection data./

#if defined(ENABLE_OVERLOADING)
    TracerParamsPropertyInfo                ,
#endif
    clearTracerParams                       ,
    constructTracerParams                   ,
    getTracerParams                         ,
    setTracerParams                         ,
#if defined(ENABLE_OVERLOADING)
    tracerParams                            ,
#endif




    ) 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.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 qualified GI.GObject.Objects.Object as GObject.Object
import {-# SOURCE #-} qualified GI.Gst.Objects.Object as Gst.Object
import {-# SOURCE #-} qualified GI.Gst.Objects.Plugin as Gst.Plugin

-- | Memory-managed wrapper type.
newtype Tracer = Tracer (SP.ManagedPtr Tracer)
    deriving (Tracer -> Tracer -> Bool
(Tracer -> Tracer -> Bool)
-> (Tracer -> Tracer -> Bool) -> Eq Tracer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Tracer -> Tracer -> Bool
$c/= :: Tracer -> Tracer -> Bool
== :: Tracer -> Tracer -> Bool
$c== :: Tracer -> Tracer -> Bool
Eq)

instance SP.ManagedPtrNewtype Tracer where
    toManagedPtr :: Tracer -> ManagedPtr Tracer
toManagedPtr (Tracer ManagedPtr Tracer
p) = ManagedPtr Tracer
p

foreign import ccall "gst_tracer_get_type"
    c_gst_tracer_get_type :: IO B.Types.GType

instance B.Types.TypedObject Tracer where
    glibType :: IO GType
glibType = IO GType
c_gst_tracer_get_type

instance B.Types.GObject Tracer

-- | Type class for types which can be safely cast to `Tracer`, for instance with `toTracer`.
class (SP.GObject o, O.IsDescendantOf Tracer o) => IsTracer o
instance (SP.GObject o, O.IsDescendantOf Tracer o) => IsTracer o

instance O.HasParentTypes Tracer
type instance O.ParentTypes Tracer = '[Gst.Object.Object, GObject.Object.Object]

-- | Cast to `Tracer`, for types for which this is known to be safe. For general casts, use `Data.GI.Base.ManagedPtr.castTo`.
toTracer :: (MIO.MonadIO m, IsTracer o) => o -> m Tracer
toTracer :: forall (m :: * -> *) o. (MonadIO m, IsTracer o) => o -> m Tracer
toTracer = IO Tracer -> m Tracer
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO Tracer -> m Tracer) -> (o -> IO Tracer) -> o -> m Tracer
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ManagedPtr Tracer -> Tracer) -> o -> IO Tracer
forall o o'.
(HasCallStack, ManagedPtrNewtype o, TypedObject o,
 ManagedPtrNewtype o', TypedObject o') =>
(ManagedPtr o' -> o') -> o -> IO o'
B.ManagedPtr.unsafeCastTo ManagedPtr Tracer -> Tracer
Tracer

-- | Convert 'Tracer' to and from 'Data.GI.Base.GValue.GValue'. See 'Data.GI.Base.GValue.toGValue' and 'Data.GI.Base.GValue.fromGValue'.
instance B.GValue.IsGValue (Maybe Tracer) where
    gvalueGType_ :: IO GType
gvalueGType_ = IO GType
c_gst_tracer_get_type
    gvalueSet_ :: Ptr GValue -> Maybe Tracer -> IO ()
gvalueSet_ Ptr GValue
gv Maybe Tracer
P.Nothing = Ptr GValue -> Ptr Tracer -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv (Ptr Tracer
forall a. Ptr a
FP.nullPtr :: FP.Ptr Tracer)
    gvalueSet_ Ptr GValue
gv (P.Just Tracer
obj) = Tracer -> (Ptr Tracer -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr Tracer
obj (Ptr GValue -> Ptr Tracer -> IO ()
forall a. GObject a => Ptr GValue -> Ptr a -> IO ()
B.GValue.set_object Ptr GValue
gv)
    gvalueGet_ :: Ptr GValue -> IO (Maybe Tracer)
gvalueGet_ Ptr GValue
gv = do
        Ptr Tracer
ptr <- Ptr GValue -> IO (Ptr Tracer)
forall a. GObject a => Ptr GValue -> IO (Ptr a)
B.GValue.get_object Ptr GValue
gv :: IO (FP.Ptr Tracer)
        if Ptr Tracer
ptr Ptr Tracer -> Ptr Tracer -> Bool
forall a. Eq a => a -> a -> Bool
/= Ptr Tracer
forall a. Ptr a
FP.nullPtr
        then Tracer -> Maybe Tracer
forall a. a -> Maybe a
P.Just (Tracer -> Maybe Tracer) -> IO Tracer -> IO (Maybe Tracer)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (ManagedPtr Tracer -> Tracer) -> Ptr Tracer -> IO Tracer
forall a b.
(HasCallStack, GObject a, GObject b) =>
(ManagedPtr a -> a) -> Ptr b -> IO a
B.ManagedPtr.newObject ManagedPtr Tracer -> Tracer
Tracer Ptr Tracer
ptr
        else Maybe Tracer -> IO (Maybe Tracer)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe Tracer
forall a. Maybe a
P.Nothing
        
    

#if defined(ENABLE_OVERLOADING)
type family ResolveTracerMethod (t :: Symbol) (o :: *) :: * where
    ResolveTracerMethod "addControlBinding" o = Gst.Object.ObjectAddControlBindingMethodInfo
    ResolveTracerMethod "bindProperty" o = GObject.Object.ObjectBindPropertyMethodInfo
    ResolveTracerMethod "bindPropertyFull" o = GObject.Object.ObjectBindPropertyFullMethodInfo
    ResolveTracerMethod "defaultError" o = Gst.Object.ObjectDefaultErrorMethodInfo
    ResolveTracerMethod "forceFloating" o = GObject.Object.ObjectForceFloatingMethodInfo
    ResolveTracerMethod "freezeNotify" o = GObject.Object.ObjectFreezeNotifyMethodInfo
    ResolveTracerMethod "getv" o = GObject.Object.ObjectGetvMethodInfo
    ResolveTracerMethod "hasActiveControlBindings" o = Gst.Object.ObjectHasActiveControlBindingsMethodInfo
    ResolveTracerMethod "hasAncestor" o = Gst.Object.ObjectHasAncestorMethodInfo
    ResolveTracerMethod "hasAsAncestor" o = Gst.Object.ObjectHasAsAncestorMethodInfo
    ResolveTracerMethod "hasAsParent" o = Gst.Object.ObjectHasAsParentMethodInfo
    ResolveTracerMethod "isFloating" o = GObject.Object.ObjectIsFloatingMethodInfo
    ResolveTracerMethod "notify" o = GObject.Object.ObjectNotifyMethodInfo
    ResolveTracerMethod "notifyByPspec" o = GObject.Object.ObjectNotifyByPspecMethodInfo
    ResolveTracerMethod "ref" o = Gst.Object.ObjectRefMethodInfo
    ResolveTracerMethod "refSink" o = GObject.Object.ObjectRefSinkMethodInfo
    ResolveTracerMethod "removeControlBinding" o = Gst.Object.ObjectRemoveControlBindingMethodInfo
    ResolveTracerMethod "runDispose" o = GObject.Object.ObjectRunDisposeMethodInfo
    ResolveTracerMethod "stealData" o = GObject.Object.ObjectStealDataMethodInfo
    ResolveTracerMethod "stealQdata" o = GObject.Object.ObjectStealQdataMethodInfo
    ResolveTracerMethod "suggestNextSync" o = Gst.Object.ObjectSuggestNextSyncMethodInfo
    ResolveTracerMethod "syncValues" o = Gst.Object.ObjectSyncValuesMethodInfo
    ResolveTracerMethod "thawNotify" o = GObject.Object.ObjectThawNotifyMethodInfo
    ResolveTracerMethod "unparent" o = Gst.Object.ObjectUnparentMethodInfo
    ResolveTracerMethod "unref" o = Gst.Object.ObjectUnrefMethodInfo
    ResolveTracerMethod "watchClosure" o = GObject.Object.ObjectWatchClosureMethodInfo
    ResolveTracerMethod "getControlBinding" o = Gst.Object.ObjectGetControlBindingMethodInfo
    ResolveTracerMethod "getControlRate" o = Gst.Object.ObjectGetControlRateMethodInfo
    ResolveTracerMethod "getData" o = GObject.Object.ObjectGetDataMethodInfo
    ResolveTracerMethod "getGValueArray" o = Gst.Object.ObjectGetGValueArrayMethodInfo
    ResolveTracerMethod "getName" o = Gst.Object.ObjectGetNameMethodInfo
    ResolveTracerMethod "getParent" o = Gst.Object.ObjectGetParentMethodInfo
    ResolveTracerMethod "getPathString" o = Gst.Object.ObjectGetPathStringMethodInfo
    ResolveTracerMethod "getProperty" o = GObject.Object.ObjectGetPropertyMethodInfo
    ResolveTracerMethod "getQdata" o = GObject.Object.ObjectGetQdataMethodInfo
    ResolveTracerMethod "getValue" o = Gst.Object.ObjectGetValueMethodInfo
    ResolveTracerMethod "setControlBindingDisabled" o = Gst.Object.ObjectSetControlBindingDisabledMethodInfo
    ResolveTracerMethod "setControlBindingsDisabled" o = Gst.Object.ObjectSetControlBindingsDisabledMethodInfo
    ResolveTracerMethod "setControlRate" o = Gst.Object.ObjectSetControlRateMethodInfo
    ResolveTracerMethod "setData" o = GObject.Object.ObjectSetDataMethodInfo
    ResolveTracerMethod "setDataFull" o = GObject.Object.ObjectSetDataFullMethodInfo
    ResolveTracerMethod "setName" o = Gst.Object.ObjectSetNameMethodInfo
    ResolveTracerMethod "setParent" o = Gst.Object.ObjectSetParentMethodInfo
    ResolveTracerMethod "setProperty" o = GObject.Object.ObjectSetPropertyMethodInfo
    ResolveTracerMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveTracerMethod t Tracer, O.OverloadedMethod info Tracer p) => OL.IsLabel t (Tracer -> p) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.overloadedMethod @info
#else
    fromLabel _ = O.overloadedMethod @info
#endif

#if MIN_VERSION_base(4,13,0)
instance (info ~ ResolveTracerMethod t Tracer, O.OverloadedMethod info Tracer p, R.HasField t Tracer p) => R.HasField t Tracer p where
    getField = O.overloadedMethod @info

#endif

instance (info ~ ResolveTracerMethod t Tracer, O.OverloadedMethodInfo info Tracer) => OL.IsLabel t (O.MethodProxy info Tracer) where
#if MIN_VERSION_base(4,10,0)
    fromLabel = O.MethodProxy
#else
    fromLabel _ = O.MethodProxy
#endif

#endif

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

-- | Get the value of the “@params@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' tracer #params
-- @
getTracerParams :: (MonadIO m, IsTracer o) => o -> m (Maybe T.Text)
getTracerParams :: forall (m :: * -> *) o.
(MonadIO m, IsTracer o) =>
o -> m (Maybe Text)
getTracerParams o
obj = IO (Maybe Text) -> m (Maybe Text)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (Maybe Text) -> m (Maybe Text))
-> IO (Maybe Text) -> m (Maybe Text)
forall a b. (a -> b) -> a -> b
$ o -> String -> IO (Maybe Text)
forall a. GObject a => a -> String -> IO (Maybe Text)
B.Properties.getObjectPropertyString o
obj String
"params"

-- | Set the value of the “@params@” property.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' tracer [ #params 'Data.GI.Base.Attributes.:=' value ]
-- @
setTracerParams :: (MonadIO m, IsTracer o) => o -> T.Text -> m ()
setTracerParams :: forall (m :: * -> *) o.
(MonadIO m, IsTracer o) =>
o -> Text -> m ()
setTracerParams o
obj Text
val = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ do
    o -> String -> Maybe Text -> IO ()
forall a. GObject a => a -> String -> Maybe Text -> IO ()
B.Properties.setObjectPropertyString o
obj String
"params" (Text -> Maybe Text
forall a. a -> Maybe a
Just Text
val)

-- | Construct a `GValueConstruct` with valid value for the “@params@” property. This is rarely needed directly, but it is used by `Data.GI.Base.Constructible.new`.
constructTracerParams :: (IsTracer o, MIO.MonadIO m) => T.Text -> m (GValueConstruct o)
constructTracerParams :: forall o (m :: * -> *).
(IsTracer o, MonadIO m) =>
Text -> m (GValueConstruct o)
constructTracerParams Text
val = IO (GValueConstruct o) -> m (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> m (GValueConstruct o))
-> IO (GValueConstruct o) -> m (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ do
    IO (GValueConstruct o) -> IO (GValueConstruct o)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
MIO.liftIO (IO (GValueConstruct o) -> IO (GValueConstruct o))
-> IO (GValueConstruct o) -> IO (GValueConstruct o)
forall a b. (a -> b) -> a -> b
$ String -> Maybe Text -> IO (GValueConstruct o)
forall o. String -> Maybe Text -> IO (GValueConstruct o)
B.Properties.constructObjectPropertyString String
"params" (Text -> Maybe Text
forall a. a -> Maybe a
P.Just Text
val)

-- | Set the value of the “@params@” property to `Nothing`.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.clear' #params
-- @
clearTracerParams :: (MonadIO m, IsTracer o) => o -> m ()
clearTracerParams :: forall (m :: * -> *) o. (MonadIO m, IsTracer o) => o -> m ()
clearTracerParams o
obj = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ o -> String -> Maybe Text -> IO ()
forall a. GObject a => a -> String -> Maybe Text -> IO ()
B.Properties.setObjectPropertyString o
obj String
"params" (Maybe Text
forall a. Maybe a
Nothing :: Maybe T.Text)

#if defined(ENABLE_OVERLOADING)
data TracerParamsPropertyInfo
instance AttrInfo TracerParamsPropertyInfo where
    type AttrAllowedOps TracerParamsPropertyInfo = '[ 'AttrSet, 'AttrConstruct, 'AttrGet, 'AttrClear]
    type AttrBaseTypeConstraint TracerParamsPropertyInfo = IsTracer
    type AttrSetTypeConstraint TracerParamsPropertyInfo = (~) T.Text
    type AttrTransferTypeConstraint TracerParamsPropertyInfo = (~) T.Text
    type AttrTransferType TracerParamsPropertyInfo = T.Text
    type AttrGetType TracerParamsPropertyInfo = (Maybe T.Text)
    type AttrLabel TracerParamsPropertyInfo = "params"
    type AttrOrigin TracerParamsPropertyInfo = Tracer
    attrGet = getTracerParams
    attrSet = setTracerParams
    attrTransfer _ v = do
        return v
    attrConstruct = constructTracerParams
    attrClear = clearTracerParams
#endif

#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList Tracer
type instance O.AttributeList Tracer = TracerAttributeList
type TracerAttributeList = ('[ '("name", Gst.Object.ObjectNamePropertyInfo), '("params", TracerParamsPropertyInfo), '("parent", Gst.Object.ObjectParentPropertyInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
tracerParams :: AttrLabelProxy "params"
tracerParams = AttrLabelProxy

#endif

#if defined(ENABLE_OVERLOADING)
type instance O.SignalList Tracer = TracerSignalList
type TracerSignalList = ('[ '("deepNotify", Gst.Object.ObjectDeepNotifySignalInfo), '("notify", GObject.Object.ObjectNotifySignalInfo)] :: [(Symbol, *)])

#endif

-- method Tracer::register
-- method type : MemberFunction
-- Args: [ Arg
--           { argCName = "plugin"
--           , argType = TInterface Name { namespace = "Gst" , name = "Plugin" }
--           , direction = DirectionIn
--           , mayBeNull = True
--           , argDoc =
--               Documentation
--                 { rawDocText =
--                     Just "A #GstPlugin, or %NULL for a static typefind function"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "name"
--           , argType = TBasicType TUTF8
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "The name for registering"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       , Arg
--           { argCName = "type"
--           , argType = TBasicType TGType
--           , direction = DirectionIn
--           , mayBeNull = False
--           , argDoc =
--               Documentation
--                 { rawDocText = Just "GType of tracer to register"
--                 , sinceVersion = Nothing
--                 }
--           , argScope = ScopeTypeInvalid
--           , argClosure = -1
--           , argDestroy = -1
--           , argCallerAllocates = False
--           , transfer = TransferNothing
--           }
--       ]
-- Lengths: []
-- returnType: Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tracer_register" gst_tracer_register :: 
    Ptr Gst.Plugin.Plugin ->                -- plugin : TInterface (Name {namespace = "Gst", name = "Plugin"})
    CString ->                              -- name : TBasicType TUTF8
    CGType ->                               -- type : TBasicType TGType
    IO CInt

-- | Create a new tracer-factory  capable of instantiating objects of the
-- /@type@/ and add the factory to /@plugin@/.
tracerRegister ::
    (B.CallStack.HasCallStack, MonadIO m, Gst.Plugin.IsPlugin a) =>
    Maybe (a)
    -- ^ /@plugin@/: A t'GI.Gst.Objects.Plugin.Plugin', or 'P.Nothing' for a static typefind function
    -> T.Text
    -- ^ /@name@/: The name for registering
    -> GType
    -- ^ /@type@/: GType of tracer to register
    -> m Bool
    -- ^ __Returns:__ 'P.True', if the registering succeeded, 'P.False' on error
tracerRegister :: forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsPlugin a) =>
Maybe a -> Text -> GType -> m Bool
tracerRegister Maybe a
plugin Text
name GType
type_ = IO Bool -> m Bool
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ do
    Ptr Plugin
maybePlugin <- case Maybe a
plugin of
        Maybe a
Nothing -> Ptr Plugin -> IO (Ptr Plugin)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Plugin
forall a. Ptr a
nullPtr
        Just a
jPlugin -> do
            Ptr Plugin
jPlugin' <- a -> IO (Ptr Plugin)
forall a b. (HasCallStack, ManagedPtrNewtype a) => a -> IO (Ptr b)
unsafeManagedPtrCastPtr a
jPlugin
            Ptr Plugin -> IO (Ptr Plugin)
forall (m :: * -> *) a. Monad m => a -> m a
return Ptr Plugin
jPlugin'
    CString
name' <- Text -> IO CString
textToCString Text
name
    let type_' :: CGType
type_' = GType -> CGType
gtypeToCGType GType
type_
    CInt
result <- Ptr Plugin -> CString -> CGType -> IO CInt
gst_tracer_register Ptr Plugin
maybePlugin CString
name' CGType
type_'
    let result' :: Bool
result' = (CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/= CInt
0) CInt
result
    Maybe a -> (a -> IO ()) -> IO ()
forall (m :: * -> *) a. Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust Maybe a
plugin a -> IO ()
forall a. ManagedPtrNewtype a => a -> IO ()
touchManagedPtr
    CString -> IO ()
forall a. Ptr a -> IO ()
freeMem CString
name'
    Bool -> IO Bool
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
result'

#if defined(ENABLE_OVERLOADING)
#endif