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

The structure containing the format specification of the ringbuffer.
-}

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

module GI.GstAudio.Structs.AudioRingBufferSpec
    (

-- * Exported types
    AudioRingBufferSpec(..)                 ,
    newZeroAudioRingBufferSpec              ,
    noAudioRingBufferSpec                   ,


 -- * Properties
-- ** bufferTime #attr:bufferTime#
{- | the total buffer size in microseconds
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_bufferTime          ,
#endif
    getAudioRingBufferSpecBufferTime        ,
    setAudioRingBufferSpecBufferTime        ,


-- ** caps #attr:caps#
{- | The caps that generated the Spec.
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_caps                ,
#endif
    clearAudioRingBufferSpecCaps            ,
    getAudioRingBufferSpecCaps              ,
    setAudioRingBufferSpecCaps              ,


-- ** info #attr:info#
{- | the 'GI.GstAudio.Structs.AudioInfo.AudioInfo'
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_info                ,
#endif
    getAudioRingBufferSpecInfo              ,


-- ** latencyTime #attr:latencyTime#
{- | the latency in microseconds
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_latencyTime         ,
#endif
    getAudioRingBufferSpecLatencyTime       ,
    setAudioRingBufferSpecLatencyTime       ,


-- ** seglatency #attr:seglatency#
{- | number of segments queued in the lower level device,
 defaults to segtotal
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_seglatency          ,
#endif
    getAudioRingBufferSpecSeglatency        ,
    setAudioRingBufferSpecSeglatency        ,


-- ** segsize #attr:segsize#
{- | the size of one segment in bytes
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_segsize             ,
#endif
    getAudioRingBufferSpecSegsize           ,
    setAudioRingBufferSpecSegsize           ,


-- ** segtotal #attr:segtotal#
{- | the total number of segments
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_segtotal            ,
#endif
    getAudioRingBufferSpecSegtotal          ,
    setAudioRingBufferSpecSegtotal          ,


-- ** type #attr:type#
{- | the sample type
-}
#if ENABLE_OVERLOADING
    audioRingBufferSpec_type                ,
#endif
    getAudioRingBufferSpecType              ,
    setAudioRingBufferSpecType              ,




    ) 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.Gst.Structs.Caps as Gst.Caps
import {-# SOURCE #-} qualified GI.GstAudio.Enums as GstAudio.Enums
import {-# SOURCE #-} qualified GI.GstAudio.Structs.AudioInfo as GstAudio.AudioInfo

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

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

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


-- | A convenience alias for `Nothing` :: `Maybe` `AudioRingBufferSpec`.
noAudioRingBufferSpec :: Maybe AudioRingBufferSpec
noAudioRingBufferSpec = Nothing

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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #caps
@
-}
getAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m (Maybe Gst.Caps.Caps)
getAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO (Ptr Gst.Caps.Caps)
    result <- SP.convertIfNonNull val $ \val' -> do
        val'' <- (newBoxed Gst.Caps.Caps) val'
        return val''
    return result

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #caps 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> Ptr Gst.Caps.Caps -> m ()
setAudioRingBufferSpecCaps s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Ptr Gst.Caps.Caps)

{- |
Set the value of the “@caps@” 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' #caps
@
-}
clearAudioRingBufferSpecCaps :: MonadIO m => AudioRingBufferSpec -> m ()
clearAudioRingBufferSpecCaps s = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (FP.nullPtr :: Ptr Gst.Caps.Caps)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecCapsFieldInfo
instance AttrInfo AudioRingBufferSpecCapsFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecCapsFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) (Ptr Gst.Caps.Caps)
    type AttrBaseTypeConstraint AudioRingBufferSpecCapsFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecCapsFieldInfo = Maybe Gst.Caps.Caps
    type AttrLabel AudioRingBufferSpecCapsFieldInfo = "caps"
    type AttrOrigin AudioRingBufferSpecCapsFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecCaps
    attrSet _ = setAudioRingBufferSpecCaps
    attrConstruct = undefined
    attrClear _ = clearAudioRingBufferSpecCaps

audioRingBufferSpec_caps :: AttrLabelProxy "caps"
audioRingBufferSpec_caps = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #type
@
-}
getAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> m GstAudio.Enums.AudioRingBufferFormatType
getAudioRingBufferSpecType s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO CUInt
    let val' = (toEnum . fromIntegral) val
    return val'

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #type 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecType :: MonadIO m => AudioRingBufferSpec -> GstAudio.Enums.AudioRingBufferFormatType -> m ()
setAudioRingBufferSpecType s val = liftIO $ withManagedPtr s $ \ptr -> do
    let val' = (fromIntegral . fromEnum) val
    poke (ptr `plusPtr` 8) (val' :: CUInt)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecTypeFieldInfo
instance AttrInfo AudioRingBufferSpecTypeFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecTypeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) GstAudio.Enums.AudioRingBufferFormatType
    type AttrBaseTypeConstraint AudioRingBufferSpecTypeFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecTypeFieldInfo = GstAudio.Enums.AudioRingBufferFormatType
    type AttrLabel AudioRingBufferSpecTypeFieldInfo = "type"
    type AttrOrigin AudioRingBufferSpecTypeFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecType
    attrSet _ = setAudioRingBufferSpecType
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_type :: AttrLabelProxy "type"
audioRingBufferSpec_type = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #info
@
-}
getAudioRingBufferSpecInfo :: MonadIO m => AudioRingBufferSpec -> m GstAudio.AudioInfo.AudioInfo
getAudioRingBufferSpecInfo s = liftIO $ withManagedPtr s $ \ptr -> do
    let val = ptr `plusPtr` 16 :: (Ptr GstAudio.AudioInfo.AudioInfo)
    val' <- (newBoxed GstAudio.AudioInfo.AudioInfo) val
    return val'

#if ENABLE_OVERLOADING
data AudioRingBufferSpecInfoFieldInfo
instance AttrInfo AudioRingBufferSpecInfoFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecInfoFieldInfo = '[ 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) (Ptr GstAudio.AudioInfo.AudioInfo)
    type AttrBaseTypeConstraint AudioRingBufferSpecInfoFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecInfoFieldInfo = GstAudio.AudioInfo.AudioInfo
    type AttrLabel AudioRingBufferSpecInfoFieldInfo = "info"
    type AttrOrigin AudioRingBufferSpecInfoFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecInfo
    attrSet _ = undefined
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_info :: AttrLabelProxy "info"
audioRingBufferSpec_info = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #latencyTime
@
-}
getAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> m Word64
getAudioRingBufferSpecLatencyTime s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 336) :: IO Word64
    return val

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #latencyTime 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecLatencyTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m ()
setAudioRingBufferSpecLatencyTime s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 336) (val :: Word64)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecLatencyTimeFieldInfo
instance AttrInfo AudioRingBufferSpecLatencyTimeFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecLatencyTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) Word64
    type AttrBaseTypeConstraint AudioRingBufferSpecLatencyTimeFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecLatencyTimeFieldInfo = Word64
    type AttrLabel AudioRingBufferSpecLatencyTimeFieldInfo = "latency_time"
    type AttrOrigin AudioRingBufferSpecLatencyTimeFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecLatencyTime
    attrSet _ = setAudioRingBufferSpecLatencyTime
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_latencyTime :: AttrLabelProxy "latencyTime"
audioRingBufferSpec_latencyTime = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #bufferTime
@
-}
getAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> m Word64
getAudioRingBufferSpecBufferTime s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 344) :: IO Word64
    return val

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #bufferTime 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecBufferTime :: MonadIO m => AudioRingBufferSpec -> Word64 -> m ()
setAudioRingBufferSpecBufferTime s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 344) (val :: Word64)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecBufferTimeFieldInfo
instance AttrInfo AudioRingBufferSpecBufferTimeFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecBufferTimeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) Word64
    type AttrBaseTypeConstraint AudioRingBufferSpecBufferTimeFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecBufferTimeFieldInfo = Word64
    type AttrLabel AudioRingBufferSpecBufferTimeFieldInfo = "buffer_time"
    type AttrOrigin AudioRingBufferSpecBufferTimeFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecBufferTime
    attrSet _ = setAudioRingBufferSpecBufferTime
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_bufferTime :: AttrLabelProxy "bufferTime"
audioRingBufferSpec_bufferTime = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #segsize
@
-}
getAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> m Int32
getAudioRingBufferSpecSegsize s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 352) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segsize 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecSegsize :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
setAudioRingBufferSpecSegsize s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 352) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecSegsizeFieldInfo
instance AttrInfo AudioRingBufferSpecSegsizeFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecSegsizeFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioRingBufferSpecSegsizeFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecSegsizeFieldInfo = Int32
    type AttrLabel AudioRingBufferSpecSegsizeFieldInfo = "segsize"
    type AttrOrigin AudioRingBufferSpecSegsizeFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecSegsize
    attrSet _ = setAudioRingBufferSpecSegsize
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_segsize :: AttrLabelProxy "segsize"
audioRingBufferSpec_segsize = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #segtotal
@
-}
getAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> m Int32
getAudioRingBufferSpecSegtotal s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 356) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #segtotal 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecSegtotal :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
setAudioRingBufferSpecSegtotal s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 356) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecSegtotalFieldInfo
instance AttrInfo AudioRingBufferSpecSegtotalFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecSegtotalFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioRingBufferSpecSegtotalFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecSegtotalFieldInfo = Int32
    type AttrLabel AudioRingBufferSpecSegtotalFieldInfo = "segtotal"
    type AttrOrigin AudioRingBufferSpecSegtotalFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecSegtotal
    attrSet _ = setAudioRingBufferSpecSegtotal
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_segtotal :: AttrLabelProxy "segtotal"
audioRingBufferSpec_segtotal = AttrLabelProxy

#endif


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

@
'Data.GI.Base.Attributes.get' audioRingBufferSpec #seglatency
@
-}
getAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> m Int32
getAudioRingBufferSpecSeglatency s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 360) :: IO Int32
    return val

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

@
'Data.GI.Base.Attributes.set' audioRingBufferSpec [ #seglatency 'Data.GI.Base.Attributes.:=' value ]
@
-}
setAudioRingBufferSpecSeglatency :: MonadIO m => AudioRingBufferSpec -> Int32 -> m ()
setAudioRingBufferSpecSeglatency s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 360) (val :: Int32)

#if ENABLE_OVERLOADING
data AudioRingBufferSpecSeglatencyFieldInfo
instance AttrInfo AudioRingBufferSpecSeglatencyFieldInfo where
    type AttrAllowedOps AudioRingBufferSpecSeglatencyFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) Int32
    type AttrBaseTypeConstraint AudioRingBufferSpecSeglatencyFieldInfo = (~) AudioRingBufferSpec
    type AttrGetType AudioRingBufferSpecSeglatencyFieldInfo = Int32
    type AttrLabel AudioRingBufferSpecSeglatencyFieldInfo = "seglatency"
    type AttrOrigin AudioRingBufferSpecSeglatencyFieldInfo = AudioRingBufferSpec
    attrGet _ = getAudioRingBufferSpecSeglatency
    attrSet _ = setAudioRingBufferSpecSeglatency
    attrConstruct = undefined
    attrClear _ = undefined

audioRingBufferSpec_seglatency :: AttrLabelProxy "seglatency"
audioRingBufferSpec_seglatency = AttrLabelProxy

#endif



#if ENABLE_OVERLOADING
instance O.HasAttributeList AudioRingBufferSpec
type instance O.AttributeList AudioRingBufferSpec = AudioRingBufferSpecAttributeList
type AudioRingBufferSpecAttributeList = ('[ '("caps", AudioRingBufferSpecCapsFieldInfo), '("type", AudioRingBufferSpecTypeFieldInfo), '("info", AudioRingBufferSpecInfoFieldInfo), '("latencyTime", AudioRingBufferSpecLatencyTimeFieldInfo), '("bufferTime", AudioRingBufferSpecBufferTimeFieldInfo), '("segsize", AudioRingBufferSpecSegsizeFieldInfo), '("segtotal", AudioRingBufferSpecSegtotalFieldInfo), '("seglatency", AudioRingBufferSpecSeglatencyFieldInfo)] :: [(Symbol, *)])
#endif

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

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