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

Information for an audio format.
-}

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

module GI.GstAudio.Structs.AudioFormatInfo
    (

-- * Exported types
    AudioFormatInfo(..)                     ,
    newZeroAudioFormatInfo                  ,
    noAudioFormatInfo                       ,


 -- * Properties
-- ** depth #attr:depth#
{- | amount of valid bits in /@width@/
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_depth                   ,
#endif
    getAudioFormatInfoDepth                 ,
    setAudioFormatInfoDepth                 ,


-- ** description #attr:description#
{- | user readable description of the format
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_description             ,
#endif
    clearAudioFormatInfoDescription         ,
    getAudioFormatInfoDescription           ,
    setAudioFormatInfoDescription           ,


-- ** endianness #attr:endianness#
{- | the endianness
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_endianness              ,
#endif
    getAudioFormatInfoEndianness            ,
    setAudioFormatInfoEndianness            ,


-- ** flags #attr:flags#
{- | 'GI.GstAudio.Flags.AudioFormatFlags'
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_flags                   ,
#endif
    getAudioFormatInfoFlags                 ,
    setAudioFormatInfoFlags                 ,


-- ** format #attr:format#
{- | 'GI.GstAudio.Enums.AudioFormat'
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_format                  ,
#endif
    getAudioFormatInfoFormat                ,
    setAudioFormatInfoFormat                ,


-- ** name #attr:name#
{- | string representation of the format
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_name                    ,
#endif
    clearAudioFormatInfoName                ,
    getAudioFormatInfoName                  ,
    setAudioFormatInfoName                  ,


-- ** packFunc #attr:packFunc#
{- | function to pack samples
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_packFunc                ,
#endif
    clearAudioFormatInfoPackFunc            ,
    getAudioFormatInfoPackFunc              ,
    setAudioFormatInfoPackFunc              ,


-- ** unpackFormat #attr:unpackFormat#
{- | the format of the unpacked samples
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_unpackFormat            ,
#endif
    getAudioFormatInfoUnpackFormat          ,
    setAudioFormatInfoUnpackFormat          ,


-- ** unpackFunc #attr:unpackFunc#
{- | function to unpack samples
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_unpackFunc              ,
#endif
    clearAudioFormatInfoUnpackFunc          ,
    getAudioFormatInfoUnpackFunc            ,
    setAudioFormatInfoUnpackFunc            ,


-- ** width #attr:width#
{- | amount of bits used for one sample
-}
#if ENABLE_OVERLOADING
    audioFormatInfo_width                   ,
#endif
    getAudioFormatInfoWidth                 ,
    setAudioFormatInfoWidth                 ,




    ) 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.GstAudio.Callbacks as GstAudio.Callbacks
import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
import {-# SOURCE #-} qualified GI.GstAudio.Flags as GstAudio.Flags

-- | Memory-managed wrapper type.
newtype AudioFormatInfo = AudioFormatInfo (ManagedPtr AudioFormatInfo)
instance WrappedPtr AudioFormatInfo where
    wrappedPtrCalloc = callocBytes 104
    wrappedPtrCopy = \p -> withManagedPtr p (copyBytes 104 >=> wrapPtr AudioFormatInfo)
    wrappedPtrFree = Just ptr_to_g_free

-- | Construct a `AudioFormatInfo` struct initialized to zero.
newZeroAudioFormatInfo :: MonadIO m => m AudioFormatInfo
newZeroAudioFormatInfo = liftIO $ wrappedPtrCalloc >>= wrapPtr AudioFormatInfo

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


-- | A convenience alias for `Nothing` :: `Maybe` `AudioFormatInfo`.
noAudioFormatInfo :: Maybe AudioFormatInfo
noAudioFormatInfo = Nothing

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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #format
@
-}
getAudioFormatInfoFormat :: MonadIO m => AudioFormatInfo -> m GstAudio.Enums.AudioFormat
getAudioFormatInfoFormat s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #format 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoFormat :: MonadIO m => AudioFormatInfo -> GstAudio.Enums.AudioFormat -> m ()
setAudioFormatInfoFormat s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 0) (val' :: CUInt)

#if ENABLE_OVERLOADING
data AudioFormatInfoFormatFieldInfo
instance AttrInfo AudioFormatInfoFormatFieldInfo where
    type AttrAllowedOps AudioFormatInfoFormatFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoFormatFieldInfo = (~) GstAudio.Enums.AudioFormat
    type AttrBaseTypeConstraint AudioFormatInfoFormatFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoFormatFieldInfo = GstAudio.Enums.AudioFormat
    type AttrLabel AudioFormatInfoFormatFieldInfo = "format"
    type AttrOrigin AudioFormatInfoFormatFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoFormat
    attrSet _ = setAudioFormatInfoFormat
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_format :: AttrLabelProxy "format"
audioFormatInfo_format = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #name
@
-}
getAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> m (Maybe T.Text)
getAudioFormatInfoName s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO CString
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- cstringToText val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #name 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> CString -> m ()
setAudioFormatInfoName s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: CString)

{- |
Set the value of the “@name@” 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' #name
@
-}
clearAudioFormatInfoName :: MonadIO m => AudioFormatInfo -> m ()
clearAudioFormatInfoName s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (FP.nullPtr :: CString)

#if ENABLE_OVERLOADING
data AudioFormatInfoNameFieldInfo
instance AttrInfo AudioFormatInfoNameFieldInfo where
    type AttrAllowedOps AudioFormatInfoNameFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioFormatInfoNameFieldInfo = (~) CString
    type AttrBaseTypeConstraint AudioFormatInfoNameFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoNameFieldInfo = Maybe T.Text
    type AttrLabel AudioFormatInfoNameFieldInfo = "name"
    type AttrOrigin AudioFormatInfoNameFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoName
    attrSet _ = setAudioFormatInfoName
    attrConstruct = undefined
    attrClear _ = clearAudioFormatInfoName

audioFormatInfo_name :: AttrLabelProxy "name"
audioFormatInfo_name = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #description
@
-}
getAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> m (Maybe T.Text)
getAudioFormatInfoDescription s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO CString
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- cstringToText val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #description 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> CString -> m ()
setAudioFormatInfoDescription s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: CString)

{- |
Set the value of the “@description@” 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' #description
@
-}
clearAudioFormatInfoDescription :: MonadIO m => AudioFormatInfo -> m ()
clearAudioFormatInfoDescription s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (FP.nullPtr :: CString)

#if ENABLE_OVERLOADING
data AudioFormatInfoDescriptionFieldInfo
instance AttrInfo AudioFormatInfoDescriptionFieldInfo where
    type AttrAllowedOps AudioFormatInfoDescriptionFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioFormatInfoDescriptionFieldInfo = (~) CString
    type AttrBaseTypeConstraint AudioFormatInfoDescriptionFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoDescriptionFieldInfo = Maybe T.Text
    type AttrLabel AudioFormatInfoDescriptionFieldInfo = "description"
    type AttrOrigin AudioFormatInfoDescriptionFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoDescription
    attrSet _ = setAudioFormatInfoDescription
    attrConstruct = undefined
    attrClear _ = clearAudioFormatInfoDescription

audioFormatInfo_description :: AttrLabelProxy "description"
audioFormatInfo_description = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #flags
@
-}
getAudioFormatInfoFlags :: MonadIO m => AudioFormatInfo -> m [GstAudio.Flags.AudioFormatFlags]
getAudioFormatInfoFlags s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO CUInt
    let val' = wordToGFlags val
    return val'

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #flags 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoFlags :: MonadIO m => AudioFormatInfo -> [GstAudio.Flags.AudioFormatFlags] -> m ()
setAudioFormatInfoFlags s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = gflagsToWord val
    poke (ptr `plusPtr` 24) (val' :: CUInt)

#if ENABLE_OVERLOADING
data AudioFormatInfoFlagsFieldInfo
instance AttrInfo AudioFormatInfoFlagsFieldInfo where
    type AttrAllowedOps AudioFormatInfoFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoFlagsFieldInfo = (~) [GstAudio.Flags.AudioFormatFlags]
    type AttrBaseTypeConstraint AudioFormatInfoFlagsFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoFlagsFieldInfo = [GstAudio.Flags.AudioFormatFlags]
    type AttrLabel AudioFormatInfoFlagsFieldInfo = "flags"
    type AttrOrigin AudioFormatInfoFlagsFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoFlags
    attrSet _ = setAudioFormatInfoFlags
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_flags :: AttrLabelProxy "flags"
audioFormatInfo_flags = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #endianness
@
-}
getAudioFormatInfoEndianness :: MonadIO m => AudioFormatInfo -> m Int32
getAudioFormatInfoEndianness s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 28) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #endianness 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoEndianness :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
setAudioFormatInfoEndianness s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 28) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioFormatInfoEndiannessFieldInfo
instance AttrInfo AudioFormatInfoEndiannessFieldInfo where
    type AttrAllowedOps AudioFormatInfoEndiannessFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoEndiannessFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioFormatInfoEndiannessFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoEndiannessFieldInfo = Int32
    type AttrLabel AudioFormatInfoEndiannessFieldInfo = "endianness"
    type AttrOrigin AudioFormatInfoEndiannessFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoEndianness
    attrSet _ = setAudioFormatInfoEndianness
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_endianness :: AttrLabelProxy "endianness"
audioFormatInfo_endianness = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #width
@
-}
getAudioFormatInfoWidth :: MonadIO m => AudioFormatInfo -> m Int32
getAudioFormatInfoWidth s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #width 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoWidth :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
setAudioFormatInfoWidth s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioFormatInfoWidthFieldInfo
instance AttrInfo AudioFormatInfoWidthFieldInfo where
    type AttrAllowedOps AudioFormatInfoWidthFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoWidthFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioFormatInfoWidthFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoWidthFieldInfo = Int32
    type AttrLabel AudioFormatInfoWidthFieldInfo = "width"
    type AttrOrigin AudioFormatInfoWidthFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoWidth
    attrSet _ = setAudioFormatInfoWidth
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_width :: AttrLabelProxy "width"
audioFormatInfo_width = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #depth
@
-}
getAudioFormatInfoDepth :: MonadIO m => AudioFormatInfo -> m Int32
getAudioFormatInfoDepth s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 36) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #depth 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoDepth :: MonadIO m => AudioFormatInfo -> Int32 -> m ()
setAudioFormatInfoDepth s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 36) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioFormatInfoDepthFieldInfo
instance AttrInfo AudioFormatInfoDepthFieldInfo where
    type AttrAllowedOps AudioFormatInfoDepthFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoDepthFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioFormatInfoDepthFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoDepthFieldInfo = Int32
    type AttrLabel AudioFormatInfoDepthFieldInfo = "depth"
    type AttrOrigin AudioFormatInfoDepthFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoDepth
    attrSet _ = setAudioFormatInfoDepth
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_depth :: AttrLabelProxy "depth"
audioFormatInfo_depth = AttrLabelProxy

#endif


-- XXX Skipped attribute for "AudioFormatInfo:silence" :: Not implemented: "Don't know how to unpack C array of type TCArray False 8 (-1) (TBasicType TUInt8)"
{- |
Get the value of the “@unpack_format@” field.
When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to

@
'Data.GI.Base.Attributes.get' audioFormatInfo #unpackFormat
@
-}
getAudioFormatInfoUnpackFormat :: MonadIO m => AudioFormatInfo -> m GstAudio.Enums.AudioFormat
getAudioFormatInfoUnpackFormat s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #unpackFormat 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoUnpackFormat :: MonadIO m => AudioFormatInfo -> GstAudio.Enums.AudioFormat -> m ()
setAudioFormatInfoUnpackFormat s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 48) (val' :: CUInt)

#if ENABLE_OVERLOADING
data AudioFormatInfoUnpackFormatFieldInfo
instance AttrInfo AudioFormatInfoUnpackFormatFieldInfo where
    type AttrAllowedOps AudioFormatInfoUnpackFormatFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioFormatInfoUnpackFormatFieldInfo = (~) GstAudio.Enums.AudioFormat
    type AttrBaseTypeConstraint AudioFormatInfoUnpackFormatFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoUnpackFormatFieldInfo = GstAudio.Enums.AudioFormat
    type AttrLabel AudioFormatInfoUnpackFormatFieldInfo = "unpack_format"
    type AttrOrigin AudioFormatInfoUnpackFormatFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoUnpackFormat
    attrSet _ = setAudioFormatInfoUnpackFormat
    attrConstruct = undefined
    attrClear _ = undefined

audioFormatInfo_unpackFormat :: AttrLabelProxy "unpackFormat"
audioFormatInfo_unpackFormat = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #unpackFunc
@
-}
getAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> m (Maybe GstAudio.Callbacks.AudioFormatUnpack)
getAudioFormatInfoUnpackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 56) :: IO (FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
    result <- SP.convertFunPtrIfNonNull val $ \val' -> do
        let val'' = GstAudio.Callbacks.dynamic_AudioFormatUnpack val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #unpackFunc 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> FunPtr GstAudio.Callbacks.C_AudioFormatUnpack -> m ()
setAudioFormatInfoUnpackFunc s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 56) (val :: FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)

{- |
Set the value of the “@unpack_func@” 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' #unpackFunc
@
-}
clearAudioFormatInfoUnpackFunc :: MonadIO m => AudioFormatInfo -> m ()
clearAudioFormatInfoUnpackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 56) (FP.nullFunPtr :: FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)

#if ENABLE_OVERLOADING
data AudioFormatInfoUnpackFuncFieldInfo
instance AttrInfo AudioFormatInfoUnpackFuncFieldInfo where
    type AttrAllowedOps AudioFormatInfoUnpackFuncFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioFormatInfoUnpackFuncFieldInfo = (~) (FunPtr GstAudio.Callbacks.C_AudioFormatUnpack)
    type AttrBaseTypeConstraint AudioFormatInfoUnpackFuncFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoUnpackFuncFieldInfo = Maybe GstAudio.Callbacks.AudioFormatUnpack
    type AttrLabel AudioFormatInfoUnpackFuncFieldInfo = "unpack_func"
    type AttrOrigin AudioFormatInfoUnpackFuncFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoUnpackFunc
    attrSet _ = setAudioFormatInfoUnpackFunc
    attrConstruct = undefined
    attrClear _ = clearAudioFormatInfoUnpackFunc

audioFormatInfo_unpackFunc :: AttrLabelProxy "unpackFunc"
audioFormatInfo_unpackFunc = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioFormatInfo #packFunc
@
-}
getAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> m (Maybe GstAudio.Callbacks.AudioFormatPack)
getAudioFormatInfoPackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 64) :: IO (FunPtr GstAudio.Callbacks.C_AudioFormatPack)
    result <- SP.convertFunPtrIfNonNull val $ \val' -> do
        let val'' = GstAudio.Callbacks.dynamic_AudioFormatPack val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' audioFormatInfo [ #packFunc 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> FunPtr GstAudio.Callbacks.C_AudioFormatPack -> m ()
setAudioFormatInfoPackFunc s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 64) (val :: FunPtr GstAudio.Callbacks.C_AudioFormatPack)

{- |
Set the value of the “@pack_func@” 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' #packFunc
@
-}
clearAudioFormatInfoPackFunc :: MonadIO m => AudioFormatInfo -> m ()
clearAudioFormatInfoPackFunc s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 64) (FP.nullFunPtr :: FunPtr GstAudio.Callbacks.C_AudioFormatPack)

#if ENABLE_OVERLOADING
data AudioFormatInfoPackFuncFieldInfo
instance AttrInfo AudioFormatInfoPackFuncFieldInfo where
    type AttrAllowedOps AudioFormatInfoPackFuncFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioFormatInfoPackFuncFieldInfo = (~) (FunPtr GstAudio.Callbacks.C_AudioFormatPack)
    type AttrBaseTypeConstraint AudioFormatInfoPackFuncFieldInfo = (~) AudioFormatInfo
    type AttrGetType AudioFormatInfoPackFuncFieldInfo = Maybe GstAudio.Callbacks.AudioFormatPack
    type AttrLabel AudioFormatInfoPackFuncFieldInfo = "pack_func"
    type AttrOrigin AudioFormatInfoPackFuncFieldInfo = AudioFormatInfo
    attrGet _ = getAudioFormatInfoPackFunc
    attrSet _ = setAudioFormatInfoPackFunc
    attrConstruct = undefined
    attrClear _ = clearAudioFormatInfoPackFunc

audioFormatInfo_packFunc :: AttrLabelProxy "packFunc"
audioFormatInfo_packFunc = AttrLabelProxy

#endif



#if ENABLE_OVERLOADING
instance O.HasAttributeList AudioFormatInfo
type instance O.AttributeList AudioFormatInfo = AudioFormatInfoAttributeList
type AudioFormatInfoAttributeList = ('[ '("format", AudioFormatInfoFormatFieldInfo), '("name", AudioFormatInfoNameFieldInfo), '("description", AudioFormatInfoDescriptionFieldInfo), '("flags", AudioFormatInfoFlagsFieldInfo), '("endianness", AudioFormatInfoEndiannessFieldInfo), '("width", AudioFormatInfoWidthFieldInfo), '("depth", AudioFormatInfoDepthFieldInfo), '("unpackFormat", AudioFormatInfoUnpackFormatFieldInfo), '("unpackFunc", AudioFormatInfoUnpackFuncFieldInfo), '("packFunc", AudioFormatInfoPackFuncFieldInfo)] :: [(Symbol, *)])
#endif

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

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