{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- /No description available in the introspection data./

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

module GI.GstAudio.Structs.AudioSinkClassExtension
    ( 

-- * Exported types
    AudioSinkClassExtension(..)             ,
    newZeroAudioSinkClassExtension          ,


 -- * Methods

#if defined(ENABLE_OVERLOADING)
    ResolveAudioSinkClassExtensionMethod    ,
#endif



 -- * Properties


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

#if defined(ENABLE_OVERLOADING)
    audioSinkClassExtension_clearAll        ,
#endif
    clearAudioSinkClassExtensionClearAll    ,
    getAudioSinkClassExtensionClearAll      ,
    setAudioSinkClassExtensionClearAll      ,




    ) where

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

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.BasicTypes as B.Types
import qualified Data.GI.Base.ManagedPtr as B.ManagedPtr
import qualified Data.GI.Base.GArray as B.GArray
import qualified Data.GI.Base.GClosure as B.GClosure
import qualified Data.GI.Base.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GValue as B.GValue
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
import qualified Data.GI.Base.Properties as B.Properties
import qualified Data.GI.Base.Signals as B.Signals
import qualified Control.Monad.IO.Class as MIO
import qualified Data.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.GstAudio.Callbacks as GstAudio.Callbacks

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

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

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


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

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


-- | Get the value of the “@clear_all@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' audioSinkClassExtension #clearAll
-- @
getAudioSinkClassExtensionClearAll :: MonadIO m => AudioSinkClassExtension -> m (Maybe GstAudio.Callbacks.AudioSinkClassExtensionClearAllFieldCallback)
getAudioSinkClassExtensionClearAll :: forall (m :: * -> *).
MonadIO m =>
AudioSinkClassExtension
-> m (Maybe AudioSinkClassExtensionClearAllFieldCallback)
getAudioSinkClassExtensionClearAll AudioSinkClassExtension
s = IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
-> m (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
 -> m (Maybe AudioSinkClassExtensionClearAllFieldCallback))
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
-> m (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall a b. (a -> b) -> a -> b
$ AudioSinkClassExtension
-> (Ptr AudioSinkClassExtension
    -> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback))
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioSinkClassExtension
s ((Ptr AudioSinkClassExtension
  -> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback))
 -> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback))
-> (Ptr AudioSinkClassExtension
    -> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback))
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall a b. (a -> b) -> a -> b
$ \Ptr AudioSinkClassExtension
ptr -> do
    FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
val <- Ptr (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback)
-> IO (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback)
forall a. Storable a => Ptr a -> IO a
peek (Ptr AudioSinkClassExtension
ptr Ptr AudioSinkClassExtension
-> Int
-> Ptr (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) :: IO (FunPtr GstAudio.Callbacks.C_AudioSinkClassExtensionClearAllFieldCallback)
    Maybe AudioSinkClassExtensionClearAllFieldCallback
result <- FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
-> (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
    -> IO AudioSinkClassExtensionClearAllFieldCallback)
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall a b. FunPtr a -> (FunPtr a -> IO b) -> IO (Maybe b)
SP.convertFunPtrIfNonNull FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
val ((FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
  -> IO AudioSinkClassExtensionClearAllFieldCallback)
 -> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback))
-> (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
    -> IO AudioSinkClassExtensionClearAllFieldCallback)
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall a b. (a -> b) -> a -> b
$ \FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
val' -> do
        let val'' :: AudioSinkClassExtensionClearAllFieldCallback
val'' = FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
-> AudioSinkClassExtensionClearAllFieldCallback
forall (m :: * -> *) a.
(HasCallStack, MonadIO m, IsAudioSink a) =>
FunPtr C_AudioSinkClassExtensionClearAllFieldCallback -> a -> m ()
GstAudio.Callbacks.dynamic_AudioSinkClassExtensionClearAllFieldCallback FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
val'
        AudioSinkClassExtensionClearAllFieldCallback
-> IO AudioSinkClassExtensionClearAllFieldCallback
forall (m :: * -> *) a. Monad m => a -> m a
return AudioSinkClassExtensionClearAllFieldCallback
val''
    Maybe AudioSinkClassExtensionClearAllFieldCallback
-> IO (Maybe AudioSinkClassExtensionClearAllFieldCallback)
forall (m :: * -> *) a. Monad m => a -> m a
return Maybe AudioSinkClassExtensionClearAllFieldCallback
result

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

-- | Set the value of the “@clear_all@” 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' #clearAll
-- @
clearAudioSinkClassExtensionClearAll :: MonadIO m => AudioSinkClassExtension -> m ()
clearAudioSinkClassExtensionClearAll :: forall (m :: * -> *). MonadIO m => AudioSinkClassExtension -> m ()
clearAudioSinkClassExtensionClearAll AudioSinkClassExtension
s = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ AudioSinkClassExtension
-> (Ptr AudioSinkClassExtension -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr AudioSinkClassExtension
s ((Ptr AudioSinkClassExtension -> IO ()) -> IO ())
-> (Ptr AudioSinkClassExtension -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr AudioSinkClassExtension
ptr -> do
    Ptr (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback)
-> FunPtr C_AudioSinkClassExtensionClearAllFieldCallback -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr AudioSinkClassExtension
ptr Ptr AudioSinkClassExtension
-> Int
-> Ptr (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) (FunPtr C_AudioSinkClassExtensionClearAllFieldCallback
forall a. FunPtr a
FP.nullFunPtr :: FunPtr GstAudio.Callbacks.C_AudioSinkClassExtensionClearAllFieldCallback)

#if defined(ENABLE_OVERLOADING)
data AudioSinkClassExtensionClearAllFieldInfo
instance AttrInfo AudioSinkClassExtensionClearAllFieldInfo where
    type AttrBaseTypeConstraint AudioSinkClassExtensionClearAllFieldInfo = (~) AudioSinkClassExtension
    type AttrAllowedOps AudioSinkClassExtensionClearAllFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint AudioSinkClassExtensionClearAllFieldInfo = (~) (FunPtr GstAudio.Callbacks.C_AudioSinkClassExtensionClearAllFieldCallback)
    type AttrTransferTypeConstraint AudioSinkClassExtensionClearAllFieldInfo = (~)GstAudio.Callbacks.AudioSinkClassExtensionClearAllFieldCallback
    type AttrTransferType AudioSinkClassExtensionClearAllFieldInfo = (FunPtr GstAudio.Callbacks.C_AudioSinkClassExtensionClearAllFieldCallback)
    type AttrGetType AudioSinkClassExtensionClearAllFieldInfo = Maybe GstAudio.Callbacks.AudioSinkClassExtensionClearAllFieldCallback
    type AttrLabel AudioSinkClassExtensionClearAllFieldInfo = "clear_all"
    type AttrOrigin AudioSinkClassExtensionClearAllFieldInfo = AudioSinkClassExtension
    attrGet = getAudioSinkClassExtensionClearAll
    attrSet = setAudioSinkClassExtensionClearAll
    attrConstruct = undefined
    attrClear = clearAudioSinkClassExtensionClearAll
    attrTransfer _ v = do
        GstAudio.Callbacks.mk_AudioSinkClassExtensionClearAllFieldCallback (GstAudio.Callbacks.wrap_AudioSinkClassExtensionClearAllFieldCallback Nothing v)
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstAudio.Structs.AudioSinkClassExtension.clearAll"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstaudio-1.0.24/docs/GI-GstAudio-Structs-AudioSinkClassExtension.html#g:attr:clearAll"
        })

audioSinkClassExtension_clearAll :: AttrLabelProxy "clearAll"
audioSinkClassExtension_clearAll = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList AudioSinkClassExtension
type instance O.AttributeList AudioSinkClassExtension = AudioSinkClassExtensionAttributeList
type AudioSinkClassExtensionAttributeList = ('[ '("clearAll", AudioSinkClassExtensionClearAllFieldInfo)] :: [(Symbol, *)])
#endif

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

instance (info ~ ResolveAudioSinkClassExtensionMethod t AudioSinkClassExtension, O.OverloadedMethod info AudioSinkClassExtension p) => OL.IsLabel t (AudioSinkClassExtension -> 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 ~ ResolveAudioSinkClassExtensionMethod t AudioSinkClassExtension, O.OverloadedMethod info AudioSinkClassExtension p, R.HasField t AudioSinkClassExtension p) => R.HasField t AudioSinkClassExtension p where
    getField = O.overloadedMethod @info

#endif

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

#endif