{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- CD track abstraction to communicate TOC entries to the base class.
-- 
-- This structure is only for use by sub-classed in connection with
-- 'GI.GstAudio.Objects.AudioCdSrc.audioCdSrcAddTrack'.
-- 
-- Applications will be informed of the available tracks via a TOC message
-- on the pipeline\'s t'GI.Gst.Objects.Bus.Bus' instead.

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

module GI.GstAudio.Structs.AudioCdSrcTrack
    ( 

-- * Exported types
    AudioCdSrcTrack(..)                     ,
    newZeroAudioCdSrcTrack                  ,


 -- * Methods

#if defined(ENABLE_OVERLOADING)
    ResolveAudioCdSrcTrackMethod            ,
#endif



 -- * Properties


-- ** end #attr:end#
-- | The last sector of this track (LBA)

#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack_end                     ,
#endif
    getAudioCdSrcTrackEnd                   ,
    setAudioCdSrcTrackEnd                   ,


-- ** isAudio #attr:isAudio#
-- | Whether this is an audio track

#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack_isAudio                 ,
#endif
    getAudioCdSrcTrackIsAudio               ,
    setAudioCdSrcTrackIsAudio               ,


-- ** num #attr:num#
-- | Track number in TOC (usually starts from 1, but not always)

#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack_num                     ,
#endif
    getAudioCdSrcTrackNum                   ,
    setAudioCdSrcTrackNum                   ,


-- ** start #attr:start#
-- | The first sector of this track (LBA)

#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack_start                   ,
#endif
    getAudioCdSrcTrackStart                 ,
    setAudioCdSrcTrackStart                 ,


-- ** tags #attr:tags#
-- | Track-specific tags (e.g. from cd-text information), or NULL

#if defined(ENABLE_OVERLOADING)
    audioCdSrcTrack_tags                    ,
#endif
    clearAudioCdSrcTrackTags                ,
    getAudioCdSrcTrackTags                  ,
    setAudioCdSrcTrackTags                  ,




    ) where

import Data.GI.Base.ShortPrelude
import qualified Data.GI.Base.ShortPrelude as SP
import qualified Data.GI.Base.Overloading as O
import qualified Prelude as P

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GHashTable as B.GHT
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.Coerce as Coerce
import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map
import qualified Foreign.Ptr as FP
import qualified GHC.OverloadedLabels as OL
import qualified GHC.Records as R

import qualified GI.Gst.Structs.TagList as Gst.TagList

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

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

instance BoxedPtr AudioCdSrcTrack where
    boxedPtrCopy :: AudioCdSrcTrack -> IO AudioCdSrcTrack
boxedPtrCopy = \AudioCdSrcTrack
p -> AudioCdSrcTrack
-> (Ptr AudioCdSrcTrack -> IO AudioCdSrcTrack)
-> IO AudioCdSrcTrack
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
B.ManagedPtr.withManagedPtr AudioCdSrcTrack
p (Int -> Ptr AudioCdSrcTrack -> IO (Ptr AudioCdSrcTrack)
forall a. (HasCallStack, CallocPtr a) => Int -> Ptr a -> IO (Ptr a)
copyBytes Int
48 (Ptr AudioCdSrcTrack -> IO (Ptr AudioCdSrcTrack))
-> (Ptr AudioCdSrcTrack -> IO AudioCdSrcTrack)
-> Ptr AudioCdSrcTrack
-> IO AudioCdSrcTrack
forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> (ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack)
-> Ptr AudioCdSrcTrack -> IO AudioCdSrcTrack
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
B.ManagedPtr.wrapPtr ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack
AudioCdSrcTrack)
    boxedPtrFree :: AudioCdSrcTrack -> IO ()
boxedPtrFree = \AudioCdSrcTrack
x -> AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
SP.withManagedPtr AudioCdSrcTrack
x Ptr AudioCdSrcTrack -> IO ()
forall a. Ptr a -> IO ()
SP.freeMem
instance CallocPtr AudioCdSrcTrack where
    boxedPtrCalloc :: IO (Ptr AudioCdSrcTrack)
boxedPtrCalloc = Int -> IO (Ptr AudioCdSrcTrack)
forall a. Int -> IO (Ptr a)
callocBytes Int
48


-- | Construct a `AudioCdSrcTrack` struct initialized to zero.
newZeroAudioCdSrcTrack :: MonadIO m => m AudioCdSrcTrack
newZeroAudioCdSrcTrack :: forall (m :: * -> *). MonadIO m => m AudioCdSrcTrack
newZeroAudioCdSrcTrack = IO AudioCdSrcTrack -> m AudioCdSrcTrack
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO AudioCdSrcTrack -> m AudioCdSrcTrack)
-> IO AudioCdSrcTrack -> m AudioCdSrcTrack
forall a b. (a -> b) -> a -> b
$ IO (Ptr AudioCdSrcTrack)
forall a. CallocPtr a => IO (Ptr a)
boxedPtrCalloc IO (Ptr AudioCdSrcTrack)
-> (Ptr AudioCdSrcTrack -> IO AudioCdSrcTrack)
-> IO AudioCdSrcTrack
forall a b. IO a -> (a -> IO b) -> IO b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack)
-> Ptr AudioCdSrcTrack -> IO AudioCdSrcTrack
forall a.
(HasCallStack, BoxedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack
AudioCdSrcTrack

instance tag ~ 'AttrSet => Constructible AudioCdSrcTrack tag where
    new :: forall (m :: * -> *).
MonadIO m =>
(ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack)
-> [AttrOp AudioCdSrcTrack tag] -> m AudioCdSrcTrack
new ManagedPtr AudioCdSrcTrack -> AudioCdSrcTrack
_ [AttrOp AudioCdSrcTrack tag]
attrs = do
        AudioCdSrcTrack
o <- m AudioCdSrcTrack
forall (m :: * -> *). MonadIO m => m AudioCdSrcTrack
newZeroAudioCdSrcTrack
        AudioCdSrcTrack -> [AttrOp AudioCdSrcTrack 'AttrSet] -> m ()
forall o (m :: * -> *).
MonadIO m =>
o -> [AttrOp o 'AttrSet] -> m ()
GI.Attributes.set AudioCdSrcTrack
o [AttrOp AudioCdSrcTrack tag]
[AttrOp AudioCdSrcTrack 'AttrSet]
attrs
        AudioCdSrcTrack -> m AudioCdSrcTrack
forall a. a -> m a
forall (m :: * -> *) a. Monad m => a -> m a
return AudioCdSrcTrack
o


-- | Get the value of the “@is_audio@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrcTrack #isAudio
-- @
getAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> m Bool
getAudioCdSrcTrackIsAudio :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> m Bool
getAudioCdSrcTrackIsAudio AudioCdSrcTrack
s = IO Bool -> m Bool
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Bool -> m Bool) -> IO Bool -> m Bool
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO Bool) -> IO Bool
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO Bool) -> IO Bool)
-> (Ptr AudioCdSrcTrack -> IO Bool) -> IO Bool
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    CInt
val <- Ptr CInt -> IO CInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) :: IO CInt
    let val' :: Bool
val' = (CInt -> CInt -> Bool
forall a. Eq a => a -> a -> Bool
/= CInt
0) CInt
val
    Bool -> IO Bool
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Bool
val'

-- | Set the value of the “@is_audio@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #isAudio 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrackIsAudio :: MonadIO m => AudioCdSrcTrack -> Bool -> m ()
setAudioCdSrcTrackIsAudio :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> Bool -> m ()
setAudioCdSrcTrackIsAudio AudioCdSrcTrack
s Bool
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    let val' :: CInt
val' = (Int -> CInt
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> CInt) -> (Bool -> Int) -> Bool -> CInt
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> Int
forall a. Enum a => a -> Int
fromEnum) Bool
val
    Ptr CInt -> CInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr CInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) (CInt
val' :: CInt)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackIsAudioFieldInfo
instance AttrInfo AudioCdSrcTrackIsAudioFieldInfo where
    type AttrBaseTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) AudioCdSrcTrack
    type AttrAllowedOps AudioCdSrcTrackIsAudioFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~) Bool
    type AttrTransferTypeConstraint AudioCdSrcTrackIsAudioFieldInfo = (~)Bool
    type AttrTransferType AudioCdSrcTrackIsAudioFieldInfo = Bool
    type AttrGetType AudioCdSrcTrackIsAudioFieldInfo = Bool
    type AttrLabel AudioCdSrcTrackIsAudioFieldInfo = "is_audio"
    type AttrOrigin AudioCdSrcTrackIsAudioFieldInfo = AudioCdSrcTrack
    attrGet = getAudioCdSrcTrackIsAudio
    attrSet = setAudioCdSrcTrackIsAudio
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioCdSrcTrack.isAudio"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.25/docs/GI-GstAudio-Structs-AudioCdSrcTrack.html#g:attr:isAudio"
        })

audioCdSrcTrack_isAudio :: AttrLabelProxy "isAudio"
audioCdSrcTrack_isAudio = AttrLabelProxy

#endif


-- | Get the value of the “@num@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrcTrack #num
-- @
getAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackNum :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackNum AudioCdSrcTrack
s = IO Word32 -> m Word32
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32)
-> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Word32
val <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4) :: IO Word32
    Word32 -> IO Word32
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Word32
val

-- | Set the value of the “@num@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #num 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrackNum :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackNum :: forall (m :: * -> *).
MonadIO m =>
AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackNum AudioCdSrcTrack
s Word32
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4) (Word32
val :: Word32)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackNumFieldInfo
instance AttrInfo AudioCdSrcTrackNumFieldInfo where
    type AttrBaseTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) AudioCdSrcTrack
    type AttrAllowedOps AudioCdSrcTrackNumFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioCdSrcTrackNumFieldInfo = (~) Word32
    type AttrTransferTypeConstraint AudioCdSrcTrackNumFieldInfo = (~)Word32
    type AttrTransferType AudioCdSrcTrackNumFieldInfo = Word32
    type AttrGetType AudioCdSrcTrackNumFieldInfo = Word32
    type AttrLabel AudioCdSrcTrackNumFieldInfo = "num"
    type AttrOrigin AudioCdSrcTrackNumFieldInfo = AudioCdSrcTrack
    attrGet = getAudioCdSrcTrackNum
    attrSet = setAudioCdSrcTrackNum
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioCdSrcTrack.num"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.25/docs/GI-GstAudio-Structs-AudioCdSrcTrack.html#g:attr:num"
        })

audioCdSrcTrack_num :: AttrLabelProxy "num"
audioCdSrcTrack_num = AttrLabelProxy

#endif


-- | Get the value of the “@start@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrcTrack #start
-- @
getAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackStart :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackStart AudioCdSrcTrack
s = IO Word32 -> m Word32
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32)
-> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Word32
val <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8) :: IO Word32
    Word32 -> IO Word32
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Word32
val

-- | Set the value of the “@start@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #start 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrackStart :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackStart :: forall (m :: * -> *).
MonadIO m =>
AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackStart AudioCdSrcTrack
s Word32
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8) (Word32
val :: Word32)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackStartFieldInfo
instance AttrInfo AudioCdSrcTrackStartFieldInfo where
    type AttrBaseTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) AudioCdSrcTrack
    type AttrAllowedOps AudioCdSrcTrackStartFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioCdSrcTrackStartFieldInfo = (~) Word32
    type AttrTransferTypeConstraint AudioCdSrcTrackStartFieldInfo = (~)Word32
    type AttrTransferType AudioCdSrcTrackStartFieldInfo = Word32
    type AttrGetType AudioCdSrcTrackStartFieldInfo = Word32
    type AttrLabel AudioCdSrcTrackStartFieldInfo = "start"
    type AttrOrigin AudioCdSrcTrackStartFieldInfo = AudioCdSrcTrack
    attrGet = getAudioCdSrcTrackStart
    attrSet = setAudioCdSrcTrackStart
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioCdSrcTrack.start"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.25/docs/GI-GstAudio-Structs-AudioCdSrcTrack.html#g:attr:start"
        })

audioCdSrcTrack_start :: AttrLabelProxy "start"
audioCdSrcTrack_start = AttrLabelProxy

#endif


-- | Get the value of the “@end@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrcTrack #end
-- @
getAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackEnd :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> m Word32
getAudioCdSrcTrackEnd AudioCdSrcTrack
s = IO Word32 -> m Word32
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO Word32 -> m Word32) -> IO Word32 -> m Word32
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32)
-> (Ptr AudioCdSrcTrack -> IO Word32) -> IO Word32
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Word32
val <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12) :: IO Word32
    Word32 -> IO Word32
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Word32
val

-- | Set the value of the “@end@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #end 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrackEnd :: MonadIO m => AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackEnd :: forall (m :: * -> *).
MonadIO m =>
AudioCdSrcTrack -> Word32 -> m ()
setAudioCdSrcTrackEnd AudioCdSrcTrack
s Word32
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
12) (Word32
val :: Word32)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackEndFieldInfo
instance AttrInfo AudioCdSrcTrackEndFieldInfo where
    type AttrBaseTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) AudioCdSrcTrack
    type AttrAllowedOps AudioCdSrcTrackEndFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioCdSrcTrackEndFieldInfo = (~) Word32
    type AttrTransferTypeConstraint AudioCdSrcTrackEndFieldInfo = (~)Word32
    type AttrTransferType AudioCdSrcTrackEndFieldInfo = Word32
    type AttrGetType AudioCdSrcTrackEndFieldInfo = Word32
    type AttrLabel AudioCdSrcTrackEndFieldInfo = "end"
    type AttrOrigin AudioCdSrcTrackEndFieldInfo = AudioCdSrcTrack
    attrGet = getAudioCdSrcTrackEnd
    attrSet = setAudioCdSrcTrackEnd
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioCdSrcTrack.end"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.25/docs/GI-GstAudio-Structs-AudioCdSrcTrack.html#g:attr:end"
        })

audioCdSrcTrack_end :: AttrLabelProxy "end"
audioCdSrcTrack_end = AttrLabelProxy

#endif


-- | Get the value of the “@tags@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioCdSrcTrack #tags
-- @
getAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m (Maybe Gst.TagList.TagList)
getAudioCdSrcTrackTags :: forall (m :: * -> *).
MonadIO m =>
AudioCdSrcTrack -> m (Maybe TagList)
getAudioCdSrcTrackTags AudioCdSrcTrack
s = IO (Maybe TagList) -> m (Maybe TagList)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe TagList) -> m (Maybe TagList))
-> IO (Maybe TagList) -> m (Maybe TagList)
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack
-> (Ptr AudioCdSrcTrack -> IO (Maybe TagList))
-> IO (Maybe TagList)
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO (Maybe TagList)) -> IO (Maybe TagList))
-> (Ptr AudioCdSrcTrack -> IO (Maybe TagList))
-> IO (Maybe TagList)
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr TagList
val <- Ptr (Ptr TagList) -> IO (Ptr TagList)
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr (Ptr TagList)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) :: IO (Ptr Gst.TagList.TagList)
    Maybe TagList
result <- Ptr TagList -> (Ptr TagList -> IO TagList) -> IO (Maybe TagList)
forall a b. Ptr a -> (Ptr a -> IO b) -> IO (Maybe b)
SP.convertIfNonNull Ptr TagList
val ((Ptr TagList -> IO TagList) -> IO (Maybe TagList))
-> (Ptr TagList -> IO TagList) -> IO (Maybe TagList)
forall a b. (a -> b) -> a -> b
$ \Ptr TagList
val' -> do
        TagList
val'' <- ((ManagedPtr TagList -> TagList) -> Ptr TagList -> IO TagList
forall a.
(HasCallStack, GBoxed a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newBoxed ManagedPtr TagList -> TagList
Gst.TagList.TagList) Ptr TagList
val'
        TagList -> IO TagList
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return TagList
val''
    Maybe TagList -> IO (Maybe TagList)
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe TagList
result

-- | Set the value of the “@tags@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' audioCdSrcTrack [ #tags 'Data.GI.Base.Attributes.:=' value ]
-- @
setAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> Ptr Gst.TagList.TagList -> m ()
setAudioCdSrcTrackTags :: forall (m :: * -> *).
MonadIO m =>
AudioCdSrcTrack -> Ptr TagList -> m ()
setAudioCdSrcTrackTags AudioCdSrcTrack
s Ptr TagList
val = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr (Ptr TagList) -> Ptr TagList -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr (Ptr TagList)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) (Ptr TagList
val :: Ptr Gst.TagList.TagList)

-- | Set the value of the “@tags@” field to `Nothing`.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.clear' #tags
-- @
clearAudioCdSrcTrackTags :: MonadIO m => AudioCdSrcTrack -> m ()
clearAudioCdSrcTrackTags :: forall (m :: * -> *). MonadIO m => AudioCdSrcTrack -> m ()
clearAudioCdSrcTrackTags AudioCdSrcTrack
s = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioCdSrcTrack -> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioCdSrcTrack
s ((Ptr AudioCdSrcTrack -> IO ()) -> IO ())
-> (Ptr AudioCdSrcTrack -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioCdSrcTrack
ptr -> do
    Ptr (Ptr TagList) -> Ptr TagList -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioCdSrcTrack
ptr Ptr AudioCdSrcTrack -> Int -> Ptr (Ptr TagList)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) (Ptr TagList
forall a. Ptr a
FP.nullPtr :: Ptr Gst.TagList.TagList)

#if defined(ENABLE_OVERLOADING)
data AudioCdSrcTrackTagsFieldInfo
instance AttrInfo AudioCdSrcTrackTagsFieldInfo where
    type AttrBaseTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) AudioCdSrcTrack
    type AttrAllowedOps AudioCdSrcTrackTagsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~) (Ptr Gst.TagList.TagList)
    type AttrTransferTypeConstraint AudioCdSrcTrackTagsFieldInfo = (~)(Ptr Gst.TagList.TagList)
    type AttrTransferType AudioCdSrcTrackTagsFieldInfo = (Ptr Gst.TagList.TagList)
    type AttrGetType AudioCdSrcTrackTagsFieldInfo = Maybe Gst.TagList.TagList
    type AttrLabel AudioCdSrcTrackTagsFieldInfo = "tags"
    type AttrOrigin AudioCdSrcTrackTagsFieldInfo = AudioCdSrcTrack
    attrGet = getAudioCdSrcTrackTags
    attrSet = setAudioCdSrcTrackTags
    attrConstruct = undefined
    attrClear = clearAudioCdSrcTrackTags
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioCdSrcTrack.tags"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.25/docs/GI-GstAudio-Structs-AudioCdSrcTrack.html#g:attr:tags"
        })

audioCdSrcTrack_tags :: AttrLabelProxy "tags"
audioCdSrcTrack_tags = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioCdSrcTrack
type instance O.AttributeList AudioCdSrcTrack = AudioCdSrcTrackAttributeList
type AudioCdSrcTrackAttributeList = ('[ '("isAudio", AudioCdSrcTrackIsAudioFieldInfo), '("num", AudioCdSrcTrackNumFieldInfo), '("start", AudioCdSrcTrackStartFieldInfo), '("end", AudioCdSrcTrackEndFieldInfo), '("tags", AudioCdSrcTrackTagsFieldInfo)] :: [(Symbol, *)])
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveAudioCdSrcTrackMethod (t :: Symbol) (o :: *) :: * where
    ResolveAudioCdSrcTrackMethod l o = O.MethodResolutionFailed l o

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

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

#endif

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

#endif