{- |
Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
License    : LGPL-2.1
Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc)

List of tags and values used to describe media metadata.

Strings in structures must be ASCII or UTF-8 encoded. Other encodings are
not allowed. Strings must not be empty or 'Nothing'.
-}

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

module GI.Gst.Structs.TagList
    (

-- * Exported types
    TagList(..)                             ,
    newZeroTagList                          ,
    noTagList                               ,


 -- * Methods
-- ** addValue #method:addValue#

#if ENABLE_OVERLOADING
    TagListAddValueMethodInfo               ,
#endif
    tagListAddValue                         ,


-- ** copyValue #method:copyValue#

    tagListCopyValue                        ,


-- ** foreach #method:foreach#

#if ENABLE_OVERLOADING
    TagListForeachMethodInfo                ,
#endif
    tagListForeach                          ,


-- ** getBoolean #method:getBoolean#

#if ENABLE_OVERLOADING
    TagListGetBooleanMethodInfo             ,
#endif
    tagListGetBoolean                       ,


-- ** getBooleanIndex #method:getBooleanIndex#

#if ENABLE_OVERLOADING
    TagListGetBooleanIndexMethodInfo        ,
#endif
    tagListGetBooleanIndex                  ,


-- ** getDate #method:getDate#

#if ENABLE_OVERLOADING
    TagListGetDateMethodInfo                ,
#endif
    tagListGetDate                          ,


-- ** getDateIndex #method:getDateIndex#

#if ENABLE_OVERLOADING
    TagListGetDateIndexMethodInfo           ,
#endif
    tagListGetDateIndex                     ,


-- ** getDateTime #method:getDateTime#

#if ENABLE_OVERLOADING
    TagListGetDateTimeMethodInfo            ,
#endif
    tagListGetDateTime                      ,


-- ** getDateTimeIndex #method:getDateTimeIndex#

#if ENABLE_OVERLOADING
    TagListGetDateTimeIndexMethodInfo       ,
#endif
    tagListGetDateTimeIndex                 ,


-- ** getDouble #method:getDouble#

#if ENABLE_OVERLOADING
    TagListGetDoubleMethodInfo              ,
#endif
    tagListGetDouble                        ,


-- ** getDoubleIndex #method:getDoubleIndex#

#if ENABLE_OVERLOADING
    TagListGetDoubleIndexMethodInfo         ,
#endif
    tagListGetDoubleIndex                   ,


-- ** getFloat #method:getFloat#

#if ENABLE_OVERLOADING
    TagListGetFloatMethodInfo               ,
#endif
    tagListGetFloat                         ,


-- ** getFloatIndex #method:getFloatIndex#

#if ENABLE_OVERLOADING
    TagListGetFloatIndexMethodInfo          ,
#endif
    tagListGetFloatIndex                    ,


-- ** getInt #method:getInt#

#if ENABLE_OVERLOADING
    TagListGetIntMethodInfo                 ,
#endif
    tagListGetInt                           ,


-- ** getInt64 #method:getInt64#

#if ENABLE_OVERLOADING
    TagListGetInt64MethodInfo               ,
#endif
    tagListGetInt64                         ,


-- ** getInt64Index #method:getInt64Index#

#if ENABLE_OVERLOADING
    TagListGetInt64IndexMethodInfo          ,
#endif
    tagListGetInt64Index                    ,


-- ** getIntIndex #method:getIntIndex#

#if ENABLE_OVERLOADING
    TagListGetIntIndexMethodInfo            ,
#endif
    tagListGetIntIndex                      ,


-- ** getPointer #method:getPointer#

#if ENABLE_OVERLOADING
    TagListGetPointerMethodInfo             ,
#endif
    tagListGetPointer                       ,


-- ** getPointerIndex #method:getPointerIndex#

#if ENABLE_OVERLOADING
    TagListGetPointerIndexMethodInfo        ,
#endif
    tagListGetPointerIndex                  ,


-- ** getSample #method:getSample#

#if ENABLE_OVERLOADING
    TagListGetSampleMethodInfo              ,
#endif
    tagListGetSample                        ,


-- ** getSampleIndex #method:getSampleIndex#

#if ENABLE_OVERLOADING
    TagListGetSampleIndexMethodInfo         ,
#endif
    tagListGetSampleIndex                   ,


-- ** getScope #method:getScope#

#if ENABLE_OVERLOADING
    TagListGetScopeMethodInfo               ,
#endif
    tagListGetScope                         ,


-- ** getString #method:getString#

#if ENABLE_OVERLOADING
    TagListGetStringMethodInfo              ,
#endif
    tagListGetString                        ,


-- ** getStringIndex #method:getStringIndex#

#if ENABLE_OVERLOADING
    TagListGetStringIndexMethodInfo         ,
#endif
    tagListGetStringIndex                   ,


-- ** getTagSize #method:getTagSize#

#if ENABLE_OVERLOADING
    TagListGetTagSizeMethodInfo             ,
#endif
    tagListGetTagSize                       ,


-- ** getUint #method:getUint#

#if ENABLE_OVERLOADING
    TagListGetUintMethodInfo                ,
#endif
    tagListGetUint                          ,


-- ** getUint64 #method:getUint64#

#if ENABLE_OVERLOADING
    TagListGetUint64MethodInfo              ,
#endif
    tagListGetUint64                        ,


-- ** getUint64Index #method:getUint64Index#

#if ENABLE_OVERLOADING
    TagListGetUint64IndexMethodInfo         ,
#endif
    tagListGetUint64Index                   ,


-- ** getUintIndex #method:getUintIndex#

#if ENABLE_OVERLOADING
    TagListGetUintIndexMethodInfo           ,
#endif
    tagListGetUintIndex                     ,


-- ** getValueIndex #method:getValueIndex#

#if ENABLE_OVERLOADING
    TagListGetValueIndexMethodInfo          ,
#endif
    tagListGetValueIndex                    ,


-- ** insert #method:insert#

#if ENABLE_OVERLOADING
    TagListInsertMethodInfo                 ,
#endif
    tagListInsert                           ,


-- ** isEmpty #method:isEmpty#

#if ENABLE_OVERLOADING
    TagListIsEmptyMethodInfo                ,
#endif
    tagListIsEmpty                          ,


-- ** isEqual #method:isEqual#

#if ENABLE_OVERLOADING
    TagListIsEqualMethodInfo                ,
#endif
    tagListIsEqual                          ,


-- ** merge #method:merge#

#if ENABLE_OVERLOADING
    TagListMergeMethodInfo                  ,
#endif
    tagListMerge                            ,


-- ** nTags #method:nTags#

#if ENABLE_OVERLOADING
    TagListNTagsMethodInfo                  ,
#endif
    tagListNTags                            ,


-- ** newEmpty #method:newEmpty#

    tagListNewEmpty                         ,


-- ** newFromString #method:newFromString#

    tagListNewFromString                    ,


-- ** nthTagName #method:nthTagName#

#if ENABLE_OVERLOADING
    TagListNthTagNameMethodInfo             ,
#endif
    tagListNthTagName                       ,


-- ** peekStringIndex #method:peekStringIndex#

#if ENABLE_OVERLOADING
    TagListPeekStringIndexMethodInfo        ,
#endif
    tagListPeekStringIndex                  ,


-- ** removeTag #method:removeTag#

#if ENABLE_OVERLOADING
    TagListRemoveTagMethodInfo              ,
#endif
    tagListRemoveTag                        ,


-- ** setScope #method:setScope#

#if ENABLE_OVERLOADING
    TagListSetScopeMethodInfo               ,
#endif
    tagListSetScope                         ,


-- ** toString #method:toString#

#if ENABLE_OVERLOADING
    TagListToStringMethodInfo               ,
#endif
    tagListToString                         ,




 -- * Properties
-- ** miniObject #attr:miniObject#
{- | the parent type
-}
    getTagListMiniObject                    ,
#if ENABLE_OVERLOADING
    tagList_miniObject                      ,
#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.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.GLib.Structs.Date as GLib.Date
import qualified GI.Gst.Callbacks as Gst.Callbacks
import {-# SOURCE #-} qualified GI.Gst.Enums as Gst.Enums
import {-# SOURCE #-} qualified GI.Gst.Structs.DateTime as Gst.DateTime
import {-# SOURCE #-} qualified GI.Gst.Structs.MiniObject as Gst.MiniObject
import {-# SOURCE #-} qualified GI.Gst.Structs.Sample as Gst.Sample

-- | Memory-managed wrapper type.
newtype TagList = TagList (ManagedPtr TagList)
foreign import ccall "gst_tag_list_get_type" c_gst_tag_list_get_type ::
    IO GType

instance BoxedObject TagList where
    boxedType _ = c_gst_tag_list_get_type

-- | Construct a `TagList` struct initialized to zero.
newZeroTagList :: MonadIO m => m TagList
newZeroTagList = liftIO $ callocBoxedBytes 64 >>= wrapBoxed TagList

instance tag ~ 'AttrSet => Constructible TagList tag where
    new _ attrs = do
        o <- newZeroTagList
        GI.Attributes.set o attrs
        return o


-- | A convenience alias for `Nothing` :: `Maybe` `TagList`.
noTagList :: Maybe TagList
noTagList = Nothing

{- |
Get the value of the “@mini_object@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' tagList #miniObject
@
-}
getTagListMiniObject :: MonadIO m => TagList -> m Gst.MiniObject.MiniObject
getTagListMiniObject s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 0 :: (Ptr Gst.MiniObject.MiniObject)
    val' <- (newPtr Gst.MiniObject.MiniObject) val
    return val'

#if ENABLE_OVERLOADING
data TagListMiniObjectFieldInfo
instance AttrInfo TagListMiniObjectFieldInfo where
    type AttrAllowedOps TagListMiniObjectFieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint TagListMiniObjectFieldInfo = (~) (Ptr Gst.MiniObject.MiniObject)
    type AttrBaseTypeConstraint TagListMiniObjectFieldInfo = (~) TagList
    type AttrGetType TagListMiniObjectFieldInfo = Gst.MiniObject.MiniObject
    type AttrLabel TagListMiniObjectFieldInfo = "mini_object"
    type AttrOrigin TagListMiniObjectFieldInfo = TagList
    attrGet _ = getTagListMiniObject
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined

tagList_miniObject :: AttrLabelProxy "miniObject"
tagList_miniObject = AttrLabelProxy

#endif



#if ENABLE_OVERLOADING
instance O.HasAttributeList TagList
type instance O.AttributeList TagList = TagListAttributeList
type TagListAttributeList = ('[ '("miniObject", TagListMiniObjectFieldInfo)] :: [(Symbol, *)])
#endif

-- method TagList::new_empty
-- method type : Constructor
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "TagList"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_new_empty" gst_tag_list_new_empty ::
    IO (Ptr TagList)

{- |
Creates a new empty GstTagList.

Free-function: gst_tag_list_unref
-}
tagListNewEmpty ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m TagList
    {- ^ __Returns:__ An empty tag list -}
tagListNewEmpty  = liftIO $ do
    result <- gst_tag_list_new_empty
    checkUnexpectedReturnNULL "tagListNewEmpty" result
    result' <- (wrapBoxed TagList) result
    return result'

#if ENABLE_OVERLOADING
#endif

-- method TagList::new_from_string
-- method type : Constructor
-- Args : [Arg {argCName = "str", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a string created with gst_tag_list_to_string()", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "TagList"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_new_from_string" gst_tag_list_new_from_string ::
    CString ->                              -- str : TBasicType TUTF8
    IO (Ptr TagList)

{- |
Deserializes a tag list.
-}
tagListNewFromString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@str@/: a string created with 'GI.Gst.Structs.TagList.tagListToString' -}
    -> m (Maybe TagList)
    {- ^ __Returns:__ a new 'GI.Gst.Structs.TagList.TagList', or 'Nothing' in case of an
error. -}
tagListNewFromString str = liftIO $ do
    str' <- textToCString str
    result <- gst_tag_list_new_from_string str'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (wrapBoxed TagList) result'
        return result''
    freeMem str'
    return maybeResult

#if ENABLE_OVERLOADING
#endif

-- method TagList::add_value
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to set tags in", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface (Name {namespace = "Gst", name = "TagMergeMode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the mode to use", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "GObject", name = "Value"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "GValue for this tag", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_add_value" gst_tag_list_add_value ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CUInt ->                                -- mode : TInterface (Name {namespace = "Gst", name = "TagMergeMode"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr GValue ->                           -- value : TInterface (Name {namespace = "GObject", name = "Value"})
    IO ()

{- |
Sets the GValue for a given tag using the specified mode.
-}
tagListAddValue ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: list to set tags in -}
    -> Gst.Enums.TagMergeMode
    {- ^ /@mode@/: the mode to use -}
    -> T.Text
    {- ^ /@tag@/: tag -}
    -> GValue
    {- ^ /@value@/: GValue for this tag -}
    -> m ()
tagListAddValue list mode tag value = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    let mode' = (fromIntegral . fromEnum) mode
    tag' <- textToCString tag
    value' <- unsafeManagedPtrGetPtr value
    gst_tag_list_add_value list' mode' tag' value'
    touchManagedPtr list
    touchManagedPtr value
    freeMem tag'
    return ()

#if ENABLE_OVERLOADING
data TagListAddValueMethodInfo
instance (signature ~ (Gst.Enums.TagMergeMode -> T.Text -> GValue -> m ()), MonadIO m) => O.MethodInfo TagListAddValueMethodInfo TagList signature where
    overloadedMethod _ = tagListAddValue

#endif

-- method TagList::foreach
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to iterate over", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "func", argType = TInterface (Name {namespace = "Gst", name = "TagForeachFunc"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "function to be called for each tag", sinceVersion = Nothing}, argScope = ScopeTypeCall, argClosure = 2, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "user specified data", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_foreach" gst_tag_list_foreach ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    FunPtr Gst.Callbacks.C_TagForeachFunc -> -- func : TInterface (Name {namespace = "Gst", name = "TagForeachFunc"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

{- |
Calls the given function for each tag inside the tag list. Note that if there
is no tag, the function won\'t be called at all.
-}
tagListForeach ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: list to iterate over -}
    -> Gst.Callbacks.TagForeachFunc
    {- ^ /@func@/: function to be called for each tag -}
    -> m ()
tagListForeach list func = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    func' <- Gst.Callbacks.mk_TagForeachFunc (Gst.Callbacks.wrap_TagForeachFunc Nothing (Gst.Callbacks.drop_closures_TagForeachFunc func))
    let userData = nullPtr
    gst_tag_list_foreach list' func' userData
    safeFreeFunPtr $ castFunPtrToPtr func'
    touchManagedPtr list
    return ()

#if ENABLE_OVERLOADING
data TagListForeachMethodInfo
instance (signature ~ (Gst.Callbacks.TagForeachFunc -> m ()), MonadIO m) => O.MethodInfo TagListForeachMethodInfo TagList signature where
    overloadedMethod _ = tagListForeach

#endif

-- method TagList::get_boolean
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TBoolean, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_boolean" gst_tag_list_get_boolean ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr CInt ->                             -- value : TBasicType TBoolean
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetBoolean ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Bool))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetBoolean list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CInt)
    result <- gst_tag_list_get_boolean list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = (/= 0) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetBooleanMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Bool))), MonadIO m) => O.MethodInfo TagListGetBooleanMethodInfo TagList signature where
    overloadedMethod _ = tagListGetBoolean

#endif

-- method TagList::get_boolean_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TBoolean, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_boolean_index" gst_tag_list_get_boolean_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr CInt ->                             -- value : TBasicType TBoolean
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetBooleanIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Bool))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetBooleanIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CInt)
    result <- gst_tag_list_get_boolean_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = (/= 0) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetBooleanIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Bool))), MonadIO m) => O.MethodInfo TagListGetBooleanIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetBooleanIndex

#endif

-- method TagList::get_date
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "GLib", name = "Date"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of a GDate pointer\n    variable to store the result into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_date" gst_tag_list_get_date ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr (Ptr GLib.Date.Date) ->             -- value : TInterface (Name {namespace = "GLib", name = "Date"})
    IO CInt

{- |
Copies the first date for the given tag in the taglist into the variable
pointed to by /@value@/. Free the date with 'GI.GLib.Structs.Date.dateFree' when it is no longer
needed.

Free-function: g_date_free
-}
tagListGetDate ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, GLib.Date.Date))
    {- ^ __Returns:__ 'True', if a date was copied, 'False' if the tag didn\'t exist in the
             given list or if it was 'Nothing'. -}
tagListGetDate list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr GLib.Date.Date))
    result <- gst_tag_list_get_date list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- (wrapBoxed GLib.Date.Date) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDateMethodInfo
instance (signature ~ (T.Text -> m ((Bool, GLib.Date.Date))), MonadIO m) => O.MethodInfo TagListGetDateMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDate

#endif

-- method TagList::get_date_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "GLib", name = "Date"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_date_index" gst_tag_list_get_date_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr (Ptr GLib.Date.Date) ->             -- value : TInterface (Name {namespace = "GLib", name = "Date"})
    IO CInt

{- |
Gets the date that is at the given index for the given tag in the given
list and copies it into the variable pointed to by /@value@/. Free the date
with 'GI.GLib.Structs.Date.dateFree' when it is no longer needed.

Free-function: g_date_free
-}
tagListGetDateIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, GLib.Date.Date))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list or if it was 'Nothing'. -}
tagListGetDateIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr GLib.Date.Date))
    result <- gst_tag_list_get_date_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- (wrapBoxed GLib.Date.Date) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDateIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, GLib.Date.Date))), MonadIO m) => O.MethodInfo TagListGetDateIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDateIndex

#endif

-- method TagList::get_date_time
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "Gst", name = "DateTime"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of a #GstDateTime\n    pointer variable to store the result into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_date_time" gst_tag_list_get_date_time ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr (Ptr Gst.DateTime.DateTime) ->      -- value : TInterface (Name {namespace = "Gst", name = "DateTime"})
    IO CInt

{- |
Copies the first datetime for the given tag in the taglist into the variable
pointed to by /@value@/. Unref the date with 'GI.Gst.Structs.DateTime.dateTimeUnref' when
it is no longer needed.

Free-function: gst_date_time_unref
-}
tagListGetDateTime ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Gst.DateTime.DateTime))
    {- ^ __Returns:__ 'True', if a datetime was copied, 'False' if the tag didn\'t exist in
             the given list or if it was 'Nothing'. -}
tagListGetDateTime list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr Gst.DateTime.DateTime))
    result <- gst_tag_list_get_date_time list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- (wrapBoxed Gst.DateTime.DateTime) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDateTimeMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Gst.DateTime.DateTime))), MonadIO m) => O.MethodInfo TagListGetDateTimeMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDateTime

#endif

-- method TagList::get_date_time_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TInterface (Name {namespace = "Gst", name = "DateTime"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_date_time_index" gst_tag_list_get_date_time_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr (Ptr Gst.DateTime.DateTime) ->      -- value : TInterface (Name {namespace = "Gst", name = "DateTime"})
    IO CInt

{- |
Gets the datetime that is at the given index for the given tag in the given
list and copies it into the variable pointed to by /@value@/. Unref the datetime
with 'GI.Gst.Structs.DateTime.dateTimeUnref' when it is no longer needed.

Free-function: gst_date_time_unref
-}
tagListGetDateTimeIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Gst.DateTime.DateTime))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list or if it was 'Nothing'. -}
tagListGetDateTimeIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr Gst.DateTime.DateTime))
    result <- gst_tag_list_get_date_time_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- (wrapBoxed Gst.DateTime.DateTime) value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDateTimeIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Gst.DateTime.DateTime))), MonadIO m) => O.MethodInfo TagListGetDateTimeIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDateTimeIndex

#endif

-- method TagList::get_double
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_double" gst_tag_list_get_double ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr CDouble ->                          -- value : TBasicType TDouble
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetDouble ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Double))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetDouble list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CDouble)
    result <- gst_tag_list_get_double list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = realToFrac value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDoubleMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Double))), MonadIO m) => O.MethodInfo TagListGetDoubleMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDouble

#endif

-- method TagList::get_double_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TDouble, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_double_index" gst_tag_list_get_double_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr CDouble ->                          -- value : TBasicType TDouble
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetDoubleIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Double))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetDoubleIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CDouble)
    result <- gst_tag_list_get_double_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = realToFrac value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetDoubleIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Double))), MonadIO m) => O.MethodInfo TagListGetDoubleIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetDoubleIndex

#endif

-- method TagList::get_float
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TFloat, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_float" gst_tag_list_get_float ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr CFloat ->                           -- value : TBasicType TFloat
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetFloat ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Float))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetFloat list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CFloat)
    result <- gst_tag_list_get_float list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = realToFrac value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetFloatMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Float))), MonadIO m) => O.MethodInfo TagListGetFloatMethodInfo TagList signature where
    overloadedMethod _ = tagListGetFloat

#endif

-- method TagList::get_float_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TFloat, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_float_index" gst_tag_list_get_float_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr CFloat ->                           -- value : TBasicType TFloat
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetFloatIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Float))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetFloatIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CFloat)
    result <- gst_tag_list_get_float_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    let value'' = realToFrac value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetFloatIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Float))), MonadIO m) => O.MethodInfo TagListGetFloatIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetFloatIndex

#endif

-- method TagList::get_int
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_int" gst_tag_list_get_int ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr Int32 ->                            -- value : TBasicType TInt
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetInt ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Int32))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetInt list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Int32)
    result <- gst_tag_list_get_int list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetIntMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Int32))), MonadIO m) => O.MethodInfo TagListGetIntMethodInfo TagList signature where
    overloadedMethod _ = tagListGetInt

#endif

-- method TagList::get_int64
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_int64" gst_tag_list_get_int64 ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr Int64 ->                            -- value : TBasicType TInt64
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetInt64 ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Int64))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetInt64 list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Int64)
    result <- gst_tag_list_get_int64 list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetInt64MethodInfo
instance (signature ~ (T.Text -> m ((Bool, Int64))), MonadIO m) => O.MethodInfo TagListGetInt64MethodInfo TagList signature where
    overloadedMethod _ = tagListGetInt64

#endif

-- method TagList::get_int64_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_int64_index" gst_tag_list_get_int64_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr Int64 ->                            -- value : TBasicType TInt64
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetInt64Index ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Int64))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetInt64Index list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Int64)
    result <- gst_tag_list_get_int64_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetInt64IndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Int64))), MonadIO m) => O.MethodInfo TagListGetInt64IndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetInt64Index

#endif

-- method TagList::get_int_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_int_index" gst_tag_list_get_int_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr Int32 ->                            -- value : TBasicType TInt
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetIntIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Int32))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetIntIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Int32)
    result <- gst_tag_list_get_int_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetIntIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Int32))), MonadIO m) => O.MethodInfo TagListGetIntIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetIntIndex

#endif

-- method TagList::get_pointer
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TPtr, direction = DirectionOut, mayBeNull = True, argDoc = Documentation {rawDocText = Just "location for the result", 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_tag_list_get_pointer" gst_tag_list_get_pointer ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr (Ptr ()) ->                         -- value : TBasicType TPtr
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetPointer ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Ptr ()))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetPointer list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr ()))
    result <- gst_tag_list_get_pointer list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetPointerMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Ptr ()))), MonadIO m) => O.MethodInfo TagListGetPointerMethodInfo TagList signature where
    overloadedMethod _ = tagListGetPointer

#endif

-- method TagList::get_pointer_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TPtr, direction = DirectionOut, mayBeNull = True, argDoc = Documentation {rawDocText = Just "location for the result", 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_tag_list_get_pointer_index" gst_tag_list_get_pointer_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr (Ptr ()) ->                         -- value : TBasicType TPtr
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetPointerIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Ptr ()))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetPointerIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr (Ptr ()))
    result <- gst_tag_list_get_pointer_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetPointerIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Ptr ()))), MonadIO m) => O.MethodInfo TagListGetPointerIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetPointerIndex

#endif

-- method TagList::get_sample
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TInterface (Name {namespace = "Gst", name = "Sample"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of a GstSample\n    pointer variable to store the result into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_sample" gst_tag_list_get_sample ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr (Ptr Gst.Sample.Sample) ->          -- sample : TInterface (Name {namespace = "Gst", name = "Sample"})
    IO CInt

{- |
Copies the first sample for the given tag in the taglist into the variable
pointed to by /@sample@/. Free the sample with @/gst_sample_unref()/@ when it is
no longer needed. You can retrieve the buffer from the sample using
'GI.Gst.Structs.Sample.sampleGetBuffer' and the associated caps (if any) with
'GI.Gst.Structs.Sample.sampleGetCaps'.

Free-function: gst_sample_unref
-}
tagListGetSample ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Gst.Sample.Sample))
    {- ^ __Returns:__ 'True', if a sample was returned, 'False' if the tag didn\'t exist in
             the given list or if it was 'Nothing'. -}
tagListGetSample list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    sample <- allocMem :: IO (Ptr (Ptr Gst.Sample.Sample))
    result <- gst_tag_list_get_sample list' tag' sample
    let result' = (/= 0) result
    sample' <- peek sample
    sample'' <- (wrapBoxed Gst.Sample.Sample) sample'
    touchManagedPtr list
    freeMem tag'
    freeMem sample
    return (result', sample'')

#if ENABLE_OVERLOADING
data TagListGetSampleMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Gst.Sample.Sample))), MonadIO m) => O.MethodInfo TagListGetSampleMethodInfo TagList signature where
    overloadedMethod _ = tagListGetSample

#endif

-- method TagList::get_sample_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "sample", argType = TInterface (Name {namespace = "Gst", name = "Sample"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "address of a GstSample\n    pointer variable to store the result into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_sample_index" gst_tag_list_get_sample_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr (Ptr Gst.Sample.Sample) ->          -- sample : TInterface (Name {namespace = "Gst", name = "Sample"})
    IO CInt

{- |
Gets the sample that is at the given index for the given tag in the given
list and copies it into the variable pointed to by /@sample@/. Free the sample
with @/gst_sample_unref()/@ when it is no longer needed. You can retrieve the
buffer from the sample using 'GI.Gst.Structs.Sample.sampleGetBuffer' and the associated
caps (if any) with 'GI.Gst.Structs.Sample.sampleGetCaps'.

Free-function: gst_sample_unref
-}
tagListGetSampleIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Gst.Sample.Sample))
    {- ^ __Returns:__ 'True', if a sample was copied, 'False' if the tag didn\'t exist in the
             given list or if it was 'Nothing'. -}
tagListGetSampleIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    sample <- allocMem :: IO (Ptr (Ptr Gst.Sample.Sample))
    result <- gst_tag_list_get_sample_index list' tag' index sample
    let result' = (/= 0) result
    sample' <- peek sample
    sample'' <- (wrapBoxed Gst.Sample.Sample) sample'
    touchManagedPtr list
    freeMem tag'
    freeMem sample
    return (result', sample'')

#if ENABLE_OVERLOADING
data TagListGetSampleIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Gst.Sample.Sample))), MonadIO m) => O.MethodInfo TagListGetSampleIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetSampleIndex

#endif

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

foreign import ccall "gst_tag_list_get_scope" gst_tag_list_get_scope ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    IO CUInt

{- |
Gets the scope of /@list@/.
-}
tagListGetScope ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' -}
    -> m Gst.Enums.TagScope
    {- ^ __Returns:__ The scope of /@list@/ -}
tagListGetScope list = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    result <- gst_tag_list_get_scope list'
    let result' = (toEnum . fromIntegral) result
    touchManagedPtr list
    return result'

#if ENABLE_OVERLOADING
data TagListGetScopeMethodInfo
instance (signature ~ (m Gst.Enums.TagScope), MonadIO m) => O.MethodInfo TagListGetScopeMethodInfo TagList signature where
    overloadedMethod _ = tagListGetScope

#endif

-- method TagList::get_string
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_string" gst_tag_list_get_string ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr CString ->                          -- value : TBasicType TUTF8
    IO CInt

{- |
Copies the contents for the given tag into the value, possibly merging
multiple values into one if multiple values are associated with the tag.

Use gst_tag_list_get_string_index (list, tag, 0, value) if you want
to retrieve the first string associated with this tag unmodified.

The resulting string in /@value@/ will be in UTF-8 encoding and should be
freed by the caller using g_free when no longer needed. The
returned string is also guaranteed to be non-'Nothing' and non-empty.

Free-function: g_free
-}
tagListGetString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, T.Text))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetString list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CString)
    result <- gst_tag_list_get_string list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- cstringToText value'
    freeMem value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetStringMethodInfo
instance (signature ~ (T.Text -> m ((Bool, T.Text))), MonadIO m) => O.MethodInfo TagListGetStringMethodInfo TagList signature where
    overloadedMethod _ = tagListGetString

#endif

-- method TagList::get_string_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_string_index" gst_tag_list_get_string_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr CString ->                          -- value : TBasicType TUTF8
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.

The resulting string in /@value@/ will be in UTF-8 encoding and should be
freed by the caller using g_free when no longer needed. The
returned string is also guaranteed to be non-'Nothing' and non-empty.

Free-function: g_free
-}
tagListGetStringIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, T.Text))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetStringIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CString)
    result <- gst_tag_list_get_string_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- cstringToText value'
    freeMem value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListGetStringIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, T.Text))), MonadIO m) => O.MethodInfo TagListGetStringIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetStringIndex

#endif

-- method TagList::get_tag_size
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a taglist", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the tag to query", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_tag_size" gst_tag_list_get_tag_size ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    IO Word32

{- |
Checks how many value are stored in this tag list for the given tag.
-}
tagListGetTagSize ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a taglist -}
    -> T.Text
    {- ^ /@tag@/: the tag to query -}
    -> m Word32
    {- ^ __Returns:__ The number of tags stored -}
tagListGetTagSize list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    result <- gst_tag_list_get_tag_size list' tag'
    touchManagedPtr list
    freeMem tag'
    return result

#if ENABLE_OVERLOADING
data TagListGetTagSizeMethodInfo
instance (signature ~ (T.Text -> m Word32), MonadIO m) => O.MethodInfo TagListGetTagSizeMethodInfo TagList signature where
    overloadedMethod _ = tagListGetTagSize

#endif

-- method TagList::get_uint
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_uint" gst_tag_list_get_uint ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr Word32 ->                           -- value : TBasicType TUInt
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetUint ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Word32))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetUint list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Word32)
    result <- gst_tag_list_get_uint list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetUintMethodInfo
instance (signature ~ (T.Text -> m ((Bool, Word32))), MonadIO m) => O.MethodInfo TagListGetUintMethodInfo TagList signature where
    overloadedMethod _ = tagListGetUint

#endif

-- method TagList::get_uint64
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_uint64" gst_tag_list_get_uint64 ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Ptr Word64 ->                           -- value : TBasicType TUInt64
    IO CInt

{- |
Copies the contents for the given tag into the value, merging multiple values
into one if multiple values are associated with the tag.
-}
tagListGetUint64 ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, Word64))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetUint64 list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Word64)
    result <- gst_tag_list_get_uint64 list' tag' value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetUint64MethodInfo
instance (signature ~ (T.Text -> m ((Bool, Word64))), MonadIO m) => O.MethodInfo TagListGetUint64MethodInfo TagList signature where
    overloadedMethod _ = tagListGetUint64

#endif

-- method TagList::get_uint64_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_uint64_index" gst_tag_list_get_uint64_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr Word64 ->                           -- value : TBasicType TUInt64
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetUint64Index ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Word64))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetUint64Index list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Word64)
    result <- gst_tag_list_get_uint64_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetUint64IndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Word64))), MonadIO m) => O.MethodInfo TagListGetUint64IndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetUint64Index

#endif

-- method TagList::get_uint_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUInt, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_uint_index" gst_tag_list_get_uint_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr Word32 ->                           -- value : TBasicType TUInt
    IO CInt

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetUintIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, Word32))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
             given list. -}
tagListGetUintIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr Word32)
    result <- gst_tag_list_get_uint_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value')

#if ENABLE_OVERLOADING
data TagListGetUintIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, Word32))), MonadIO m) => O.MethodInfo TagListGetUintIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetUintIndex

#endif

-- method TagList::get_value_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GObject", name = "Value"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_get_value_index" gst_tag_list_get_value_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    IO (Ptr GValue)

{- |
Gets the value that is at the given index for the given tag in the given
list.
-}
tagListGetValueIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m (Maybe GValue)
    {- ^ __Returns:__ The GValue for the specified
         entry or 'Nothing' if the tag wasn\'t available or the tag
         doesn\'t have as many entries -}
tagListGetValueIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    result <- gst_tag_list_get_value_index list' tag' index
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (newBoxed GValue) result'
        return result''
    touchManagedPtr list
    freeMem tag'
    return maybeResult

#if ENABLE_OVERLOADING
data TagListGetValueIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m (Maybe GValue)), MonadIO m) => O.MethodInfo TagListGetValueIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListGetValueIndex

#endif

-- method TagList::insert
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "into", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to merge into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "from", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to merge from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface (Name {namespace = "Gst", name = "TagMergeMode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the mode to use", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_insert" gst_tag_list_insert ::
    Ptr TagList ->                          -- into : TInterface (Name {namespace = "Gst", name = "TagList"})
    Ptr TagList ->                          -- from : TInterface (Name {namespace = "Gst", name = "TagList"})
    CUInt ->                                -- mode : TInterface (Name {namespace = "Gst", name = "TagMergeMode"})
    IO ()

{- |
Inserts the tags of the /@from@/ list into the first list using the given mode.
-}
tagListInsert ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@into@/: list to merge into -}
    -> TagList
    {- ^ /@from@/: list to merge from -}
    -> Gst.Enums.TagMergeMode
    {- ^ /@mode@/: the mode to use -}
    -> m ()
tagListInsert into from mode = liftIO $ do
    into' <- unsafeManagedPtrGetPtr into
    from' <- unsafeManagedPtrGetPtr from
    let mode' = (fromIntegral . fromEnum) mode
    gst_tag_list_insert into' from' mode'
    touchManagedPtr into
    touchManagedPtr from
    return ()

#if ENABLE_OVERLOADING
data TagListInsertMethodInfo
instance (signature ~ (TagList -> Gst.Enums.TagMergeMode -> m ()), MonadIO m) => O.MethodInfo TagListInsertMethodInfo TagList signature where
    overloadedMethod _ = tagListInsert

#endif

-- method TagList::is_empty
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GstTagList.", 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_tag_list_is_empty" gst_tag_list_is_empty ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    IO CInt

{- |
Checks if the given taglist is empty.
-}
tagListIsEmpty ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: A 'GI.Gst.Structs.TagList.TagList'. -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the taglist is empty, otherwise 'False'. -}
tagListIsEmpty list = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    result <- gst_tag_list_is_empty list'
    let result' = (/= 0) result
    touchManagedPtr list
    return result'

#if ENABLE_OVERLOADING
data TagListIsEmptyMethodInfo
instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo TagListIsEmptyMethodInfo TagList signature where
    overloadedMethod _ = tagListIsEmpty

#endif

-- method TagList::is_equal
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list1", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "list2", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList.", 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_tag_list_is_equal" gst_tag_list_is_equal ::
    Ptr TagList ->                          -- list1 : TInterface (Name {namespace = "Gst", name = "TagList"})
    Ptr TagList ->                          -- list2 : TInterface (Name {namespace = "Gst", name = "TagList"})
    IO CInt

{- |
Checks if the two given taglists are equal.
-}
tagListIsEqual ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list1@/: a 'GI.Gst.Structs.TagList.TagList'. -}
    -> TagList
    {- ^ /@list2@/: a 'GI.Gst.Structs.TagList.TagList'. -}
    -> m Bool
    {- ^ __Returns:__ 'True' if the taglists are equal, otherwise 'False' -}
tagListIsEqual list1 list2 = liftIO $ do
    list1' <- unsafeManagedPtrGetPtr list1
    list2' <- unsafeManagedPtrGetPtr list2
    result <- gst_tag_list_is_equal list1' list2'
    let result' = (/= 0) result
    touchManagedPtr list1
    touchManagedPtr list2
    return result'

#if ENABLE_OVERLOADING
data TagListIsEqualMethodInfo
instance (signature ~ (TagList -> m Bool), MonadIO m) => O.MethodInfo TagListIsEqualMethodInfo TagList signature where
    overloadedMethod _ = tagListIsEqual

#endif

-- method TagList::merge
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list1", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "first list to merge", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "list2", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "second list to merge", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "mode", argType = TInterface (Name {namespace = "Gst", name = "TagMergeMode"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the mode to use", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "Gst", name = "TagList"}))
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_merge" gst_tag_list_merge ::
    Ptr TagList ->                          -- list1 : TInterface (Name {namespace = "Gst", name = "TagList"})
    Ptr TagList ->                          -- list2 : TInterface (Name {namespace = "Gst", name = "TagList"})
    CUInt ->                                -- mode : TInterface (Name {namespace = "Gst", name = "TagMergeMode"})
    IO (Ptr TagList)

{- |
Merges the two given lists into a new list. If one of the lists is 'Nothing', a
copy of the other is returned. If both lists are 'Nothing', 'Nothing' is returned.

Free-function: gst_tag_list_unref
-}
tagListMerge ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list1@/: first list to merge -}
    -> Maybe (TagList)
    {- ^ /@list2@/: second list to merge -}
    -> Gst.Enums.TagMergeMode
    {- ^ /@mode@/: the mode to use -}
    -> m (Maybe TagList)
    {- ^ __Returns:__ the new list -}
tagListMerge list1 list2 mode = liftIO $ do
    list1' <- unsafeManagedPtrGetPtr list1
    maybeList2 <- case list2 of
        Nothing -> return nullPtr
        Just jList2 -> do
            jList2' <- unsafeManagedPtrGetPtr jList2
            return jList2'
    let mode' = (fromIntegral . fromEnum) mode
    result <- gst_tag_list_merge list1' maybeList2 mode'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- (wrapBoxed TagList) result'
        return result''
    touchManagedPtr list1
    whenJust list2 touchManagedPtr
    return maybeResult

#if ENABLE_OVERLOADING
data TagListMergeMethodInfo
instance (signature ~ (Maybe (TagList) -> Gst.Enums.TagMergeMode -> m (Maybe TagList)), MonadIO m) => O.MethodInfo TagListMergeMethodInfo TagList signature where
    overloadedMethod _ = tagListMerge

#endif

-- method TagList::n_tags
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GstTagList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_n_tags" gst_tag_list_n_tags ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    IO Int32

{- |
Get the number of tags in /@list@/.
-}
tagListNTags ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: A 'GI.Gst.Structs.TagList.TagList'. -}
    -> m Int32
    {- ^ __Returns:__ The number of tags in /@list@/. -}
tagListNTags list = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    result <- gst_tag_list_n_tags list'
    touchManagedPtr list
    return result

#if ENABLE_OVERLOADING
data TagListNTagsMethodInfo
instance (signature ~ (m Int32), MonadIO m) => O.MethodInfo TagListNTagsMethodInfo TagList signature where
    overloadedMethod _ = tagListNTags

#endif

-- method TagList::nth_tag_name
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GstTagList.", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "the index", 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 "gst_tag_list_nth_tag_name" gst_tag_list_nth_tag_name ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    Word32 ->                               -- index : TBasicType TUInt
    IO CString

{- |
Get the name of the tag in /@list@/ at /@index@/.
-}
tagListNthTagName ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: A 'GI.Gst.Structs.TagList.TagList'. -}
    -> Word32
    {- ^ /@index@/: the index -}
    -> m T.Text
    {- ^ __Returns:__ The name of the tag at /@index@/. -}
tagListNthTagName list index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    result <- gst_tag_list_nth_tag_name list' index
    checkUnexpectedReturnNULL "tagListNthTagName" result
    result' <- cstringToText result
    touchManagedPtr list
    return result'

#if ENABLE_OVERLOADING
data TagListNthTagNameMethodInfo
instance (signature ~ (Word32 -> m T.Text), MonadIO m) => O.MethodInfo TagListNthTagNameMethodInfo TagList signature where
    overloadedMethod _ = tagListNthTagName

#endif

-- method TagList::peek_string_index
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "index", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "number of entry to read out", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "location for the result", 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_tag_list_peek_string_index" gst_tag_list_peek_string_index ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    Word32 ->                               -- index : TBasicType TUInt
    Ptr CString ->                          -- value : TBasicType TUTF8
    IO CInt

{- |
Peeks at the value that is at the given index for the given tag in the given
list.

The resulting string in /@value@/ will be in UTF-8 encoding and doesn\'t need
to be freed by the caller. The returned string is also guaranteed to
be non-'Nothing' and non-empty.
-}
tagListPeekStringIndex ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> Word32
    {- ^ /@index@/: number of entry to read out -}
    -> m ((Bool, T.Text))
    {- ^ __Returns:__ 'True', if a value was set, 'False' if the tag didn\'t exist in the
             given list. -}
tagListPeekStringIndex list tag index = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    value <- allocMem :: IO (Ptr CString)
    result <- gst_tag_list_peek_string_index list' tag' index value
    let result' = (/= 0) result
    value' <- peek value
    value'' <- cstringToText value'
    touchManagedPtr list
    freeMem tag'
    freeMem value
    return (result', value'')

#if ENABLE_OVERLOADING
data TagListPeekStringIndexMethodInfo
instance (signature ~ (T.Text -> Word32 -> m ((Bool, T.Text))), MonadIO m) => O.MethodInfo TagListPeekStringIndexMethodInfo TagList signature where
    overloadedMethod _ = tagListPeekStringIndex

#endif

-- method TagList::remove_tag
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to remove tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to remove", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_remove_tag" gst_tag_list_remove_tag ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    IO ()

{- |
Removes the given tag from the taglist.
-}
tagListRemoveTag ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: list to remove tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to remove -}
    -> m ()
tagListRemoveTag list tag = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    gst_tag_list_remove_tag list' tag'
    touchManagedPtr list
    freeMem tag'
    return ()

#if ENABLE_OVERLOADING
data TagListRemoveTagMethodInfo
instance (signature ~ (T.Text -> m ()), MonadIO m) => O.MethodInfo TagListRemoveTagMethodInfo TagList signature where
    overloadedMethod _ = tagListRemoveTag

#endif

-- method TagList::set_scope
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "scope", argType = TInterface (Name {namespace = "Gst", name = "TagScope"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "new scope for @list", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "gst_tag_list_set_scope" gst_tag_list_set_scope ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CUInt ->                                -- scope : TInterface (Name {namespace = "Gst", name = "TagScope"})
    IO ()

{- |
Sets the scope of /@list@/ to /@scope@/. By default the scope
of a taglist is stream scope.
-}
tagListSetScope ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' -}
    -> Gst.Enums.TagScope
    {- ^ /@scope@/: new scope for /@list@/ -}
    -> m ()
tagListSetScope list scope = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    let scope' = (fromIntegral . fromEnum) scope
    gst_tag_list_set_scope list' scope'
    touchManagedPtr list
    return ()

#if ENABLE_OVERLOADING
data TagListSetScopeMethodInfo
instance (signature ~ (Gst.Enums.TagScope -> m ()), MonadIO m) => O.MethodInfo TagListSetScopeMethodInfo TagList signature where
    overloadedMethod _ = tagListSetScope

#endif

-- method TagList::to_string
-- method type : OrdinaryMethod
-- Args : [Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GstTagList", 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 "gst_tag_list_to_string" gst_tag_list_to_string ::
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    IO CString

{- |
Serializes a tag list to a string.
-}
tagListToString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: a 'GI.Gst.Structs.TagList.TagList' -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ a newly-allocated string, or 'Nothing' in case of
    an error. The string must be freed with 'GI.GLib.Functions.free' when no longer
    needed. -}
tagListToString list = liftIO $ do
    list' <- unsafeManagedPtrGetPtr list
    result <- gst_tag_list_to_string list'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        freeMem result'
        return result''
    touchManagedPtr list
    return maybeResult

#if ENABLE_OVERLOADING
data TagListToStringMethodInfo
instance (signature ~ (m (Maybe T.Text)), MonadIO m) => O.MethodInfo TagListToStringMethodInfo TagList signature where
    overloadedMethod _ = tagListToString

#endif

-- method TagList::copy_value
-- method type : MemberFunction
-- Args : [Arg {argCName = "dest", argType = TInterface (Name {namespace = "GObject", name = "Value"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "uninitialized #GValue to copy into", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = True, transfer = TransferNothing},Arg {argCName = "list", argType = TInterface (Name {namespace = "Gst", name = "TagList"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "list to get the tag from", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "tag", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "tag to read out", 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_tag_list_copy_value" gst_tag_list_copy_value ::
    Ptr GValue ->                           -- dest : TInterface (Name {namespace = "GObject", name = "Value"})
    Ptr TagList ->                          -- list : TInterface (Name {namespace = "Gst", name = "TagList"})
    CString ->                              -- tag : TBasicType TUTF8
    IO CInt

{- |
Copies the contents for the given tag into the value,
merging multiple values into one if multiple values are associated
with the tag.
You must 'GI.GObject.Structs.Value.valueUnset' the value after use.
-}
tagListCopyValue ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    TagList
    {- ^ /@list@/: list to get the tag from -}
    -> T.Text
    {- ^ /@tag@/: tag to read out -}
    -> m ((Bool, GValue))
    {- ^ __Returns:__ 'True', if a value was copied, 'False' if the tag didn\'t exist in the
         given list. -}
tagListCopyValue list tag = liftIO $ do
    dest <- callocBoxedBytes 24 :: IO (Ptr GValue)
    list' <- unsafeManagedPtrGetPtr list
    tag' <- textToCString tag
    result <- gst_tag_list_copy_value dest list' tag'
    let result' = (/= 0) result
    dest' <- (wrapBoxed GValue) dest
    touchManagedPtr list
    freeMem tag'
    return (result', dest')

#if ENABLE_OVERLOADING
#endif

#if ENABLE_OVERLOADING
type family ResolveTagListMethod (t :: Symbol) (o :: *) :: * where
    ResolveTagListMethod "addValue" o = TagListAddValueMethodInfo
    ResolveTagListMethod "foreach" o = TagListForeachMethodInfo
    ResolveTagListMethod "insert" o = TagListInsertMethodInfo
    ResolveTagListMethod "isEmpty" o = TagListIsEmptyMethodInfo
    ResolveTagListMethod "isEqual" o = TagListIsEqualMethodInfo
    ResolveTagListMethod "merge" o = TagListMergeMethodInfo
    ResolveTagListMethod "nTags" o = TagListNTagsMethodInfo
    ResolveTagListMethod "nthTagName" o = TagListNthTagNameMethodInfo
    ResolveTagListMethod "peekStringIndex" o = TagListPeekStringIndexMethodInfo
    ResolveTagListMethod "removeTag" o = TagListRemoveTagMethodInfo
    ResolveTagListMethod "toString" o = TagListToStringMethodInfo
    ResolveTagListMethod "getBoolean" o = TagListGetBooleanMethodInfo
    ResolveTagListMethod "getBooleanIndex" o = TagListGetBooleanIndexMethodInfo
    ResolveTagListMethod "getDate" o = TagListGetDateMethodInfo
    ResolveTagListMethod "getDateIndex" o = TagListGetDateIndexMethodInfo
    ResolveTagListMethod "getDateTime" o = TagListGetDateTimeMethodInfo
    ResolveTagListMethod "getDateTimeIndex" o = TagListGetDateTimeIndexMethodInfo
    ResolveTagListMethod "getDouble" o = TagListGetDoubleMethodInfo
    ResolveTagListMethod "getDoubleIndex" o = TagListGetDoubleIndexMethodInfo
    ResolveTagListMethod "getFloat" o = TagListGetFloatMethodInfo
    ResolveTagListMethod "getFloatIndex" o = TagListGetFloatIndexMethodInfo
    ResolveTagListMethod "getInt" o = TagListGetIntMethodInfo
    ResolveTagListMethod "getInt64" o = TagListGetInt64MethodInfo
    ResolveTagListMethod "getInt64Index" o = TagListGetInt64IndexMethodInfo
    ResolveTagListMethod "getIntIndex" o = TagListGetIntIndexMethodInfo
    ResolveTagListMethod "getPointer" o = TagListGetPointerMethodInfo
    ResolveTagListMethod "getPointerIndex" o = TagListGetPointerIndexMethodInfo
    ResolveTagListMethod "getSample" o = TagListGetSampleMethodInfo
    ResolveTagListMethod "getSampleIndex" o = TagListGetSampleIndexMethodInfo
    ResolveTagListMethod "getScope" o = TagListGetScopeMethodInfo
    ResolveTagListMethod "getString" o = TagListGetStringMethodInfo
    ResolveTagListMethod "getStringIndex" o = TagListGetStringIndexMethodInfo
    ResolveTagListMethod "getTagSize" o = TagListGetTagSizeMethodInfo
    ResolveTagListMethod "getUint" o = TagListGetUintMethodInfo
    ResolveTagListMethod "getUint64" o = TagListGetUint64MethodInfo
    ResolveTagListMethod "getUint64Index" o = TagListGetUint64IndexMethodInfo
    ResolveTagListMethod "getUintIndex" o = TagListGetUintIndexMethodInfo
    ResolveTagListMethod "getValueIndex" o = TagListGetValueIndexMethodInfo
    ResolveTagListMethod "setScope" o = TagListSetScopeMethodInfo
    ResolveTagListMethod l o = O.MethodResolutionFailed l o

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