{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson and Iñaki García Etxebarria
-- License    : LGPL-2.1
-- Maintainer : Iñaki García Etxebarria
-- 
-- Supported frame rates: 30000\/1001, 60000\/1001 (both with and without drop
-- frame), and integer frame rates e.g. 25\/1, 30\/1, 50\/1, 60\/1.
-- 
-- The configuration of the time code.
-- 
-- /Since: 1.10/

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

module GI.GstVideo.Structs.VideoTimeCodeConfig
    ( 

-- * Exported types
    VideoTimeCodeConfig(..)                 ,
    newZeroVideoTimeCodeConfig              ,


 -- * Methods

#if defined(ENABLE_OVERLOADING)
    ResolveVideoTimeCodeConfigMethod        ,
#endif



 -- * Properties


-- ** flags #attr:flags#
-- | the corresponding t'GI.GstVideo.Flags.VideoTimeCodeFlags'

    getVideoTimeCodeConfigFlags             ,
    setVideoTimeCodeConfigFlags             ,
#if defined(ENABLE_OVERLOADING)
    videoTimeCodeConfig_flags               ,
#endif


-- ** fpsD #attr:fpsD#
-- | Denominator of the frame rate

    getVideoTimeCodeConfigFpsD              ,
    setVideoTimeCodeConfigFpsD              ,
#if defined(ENABLE_OVERLOADING)
    videoTimeCodeConfig_fpsD                ,
#endif


-- ** fpsN #attr:fpsN#
-- | Numerator of the frame rate

    getVideoTimeCodeConfigFpsN              ,
    setVideoTimeCodeConfigFpsN              ,
#if defined(ENABLE_OVERLOADING)
    videoTimeCodeConfig_fpsN                ,
#endif


-- ** latestDailyJam #attr:latestDailyJam#
-- | The latest daily jam information, if present, or NULL

    clearVideoTimeCodeConfigLatestDailyJam  ,
    getVideoTimeCodeConfigLatestDailyJam    ,
    setVideoTimeCodeConfigLatestDailyJam    ,
#if defined(ENABLE_OVERLOADING)
    videoTimeCodeConfig_latestDailyJam      ,
#endif




    ) where

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

import qualified Data.GI.Base.Attributes as GI.Attributes
import qualified Data.GI.Base.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.Kind as DK
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.GLib.Structs.DateTime as GLib.DateTime
import {-# SOURCE #-} qualified GI.GstVideo.Flags as GstVideo.Flags

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

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

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


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

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


-- | Get the value of the “@fps_n@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' videoTimeCodeConfig #fpsN
-- @
getVideoTimeCodeConfigFpsN :: MonadIO m => VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsN :: forall (m :: * -> *). MonadIO m => VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsN VideoTimeCodeConfig
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
$ VideoTimeCodeConfig
-> (Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32)
-> (Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Word32
val <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) :: 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 “@fps_n@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' videoTimeCodeConfig [ #fpsN 'Data.GI.Base.Attributes.:=' value ]
-- @
setVideoTimeCodeConfigFpsN :: MonadIO m => VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsN :: forall (m :: * -> *).
MonadIO m =>
VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsN VideoTimeCodeConfig
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
$ VideoTimeCodeConfig -> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO ()) -> IO ())
-> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0) (Word32
val :: Word32)

#if defined(ENABLE_OVERLOADING)
data VideoTimeCodeConfigFpsNFieldInfo
instance AttrInfo VideoTimeCodeConfigFpsNFieldInfo where
    type AttrBaseTypeConstraint VideoTimeCodeConfigFpsNFieldInfo = (~) VideoTimeCodeConfig
    type AttrAllowedOps VideoTimeCodeConfigFpsNFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoTimeCodeConfigFpsNFieldInfo = (~) Word32
    type AttrTransferTypeConstraint VideoTimeCodeConfigFpsNFieldInfo = (~)Word32
    type AttrTransferType VideoTimeCodeConfigFpsNFieldInfo = Word32
    type AttrGetType VideoTimeCodeConfigFpsNFieldInfo = Word32
    type AttrLabel VideoTimeCodeConfigFpsNFieldInfo = "fps_n"
    type AttrOrigin VideoTimeCodeConfigFpsNFieldInfo = VideoTimeCodeConfig
    attrGet = getVideoTimeCodeConfigFpsN
    attrSet = setVideoTimeCodeConfigFpsN
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstVideo.Structs.VideoTimeCodeConfig.fpsN"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstvideo-1.0.28/docs/GI-GstVideo-Structs-VideoTimeCodeConfig.html#g:attr:fpsN"
        })

videoTimeCodeConfig_fpsN :: AttrLabelProxy "fpsN"
videoTimeCodeConfig_fpsN = AttrLabelProxy

#endif


-- | Get the value of the “@fps_d@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.get' videoTimeCodeConfig #fpsD
-- @
getVideoTimeCodeConfigFpsD :: MonadIO m => VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsD :: forall (m :: * -> *). MonadIO m => VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsD VideoTimeCodeConfig
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
$ VideoTimeCodeConfig
-> (Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32)
-> (Ptr VideoTimeCodeConfig -> IO Word32) -> IO Word32
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Word32
val <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> 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 “@fps_d@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' videoTimeCodeConfig [ #fpsD 'Data.GI.Base.Attributes.:=' value ]
-- @
setVideoTimeCodeConfigFpsD :: MonadIO m => VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsD :: forall (m :: * -> *).
MonadIO m =>
VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsD VideoTimeCodeConfig
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
$ VideoTimeCodeConfig -> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO ()) -> IO ())
-> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
4) (Word32
val :: Word32)

#if defined(ENABLE_OVERLOADING)
data VideoTimeCodeConfigFpsDFieldInfo
instance AttrInfo VideoTimeCodeConfigFpsDFieldInfo where
    type AttrBaseTypeConstraint VideoTimeCodeConfigFpsDFieldInfo = (~) VideoTimeCodeConfig
    type AttrAllowedOps VideoTimeCodeConfigFpsDFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoTimeCodeConfigFpsDFieldInfo = (~) Word32
    type AttrTransferTypeConstraint VideoTimeCodeConfigFpsDFieldInfo = (~)Word32
    type AttrTransferType VideoTimeCodeConfigFpsDFieldInfo = Word32
    type AttrGetType VideoTimeCodeConfigFpsDFieldInfo = Word32
    type AttrLabel VideoTimeCodeConfigFpsDFieldInfo = "fps_d"
    type AttrOrigin VideoTimeCodeConfigFpsDFieldInfo = VideoTimeCodeConfig
    attrGet = getVideoTimeCodeConfigFpsD
    attrSet = setVideoTimeCodeConfigFpsD
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstVideo.Structs.VideoTimeCodeConfig.fpsD"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstvideo-1.0.28/docs/GI-GstVideo-Structs-VideoTimeCodeConfig.html#g:attr:fpsD"
        })

videoTimeCodeConfig_fpsD :: AttrLabelProxy "fpsD"
videoTimeCodeConfig_fpsD = 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' videoTimeCodeConfig #flags
-- @
getVideoTimeCodeConfigFlags :: MonadIO m => VideoTimeCodeConfig -> m [GstVideo.Flags.VideoTimeCodeFlags]
getVideoTimeCodeConfigFlags :: forall (m :: * -> *).
MonadIO m =>
VideoTimeCodeConfig -> m [VideoTimeCodeFlags]
getVideoTimeCodeConfigFlags VideoTimeCodeConfig
s = IO [VideoTimeCodeFlags] -> m [VideoTimeCodeFlags]
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO [VideoTimeCodeFlags] -> m [VideoTimeCodeFlags])
-> IO [VideoTimeCodeFlags] -> m [VideoTimeCodeFlags]
forall a b. (a -> b) -> a -> b
$ VideoTimeCodeConfig
-> (Ptr VideoTimeCodeConfig -> IO [VideoTimeCodeFlags])
-> IO [VideoTimeCodeFlags]
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO [VideoTimeCodeFlags])
 -> IO [VideoTimeCodeFlags])
-> (Ptr VideoTimeCodeConfig -> IO [VideoTimeCodeFlags])
-> IO [VideoTimeCodeFlags]
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    CUInt
val <- Ptr CUInt -> IO CUInt
forall a. Storable a => Ptr a -> IO a
peek (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8) :: IO CUInt
    let val' :: [VideoTimeCodeFlags]
val' = CUInt -> [VideoTimeCodeFlags]
forall a b. (Storable a, Integral a, Bits a, IsGFlag b) => a -> [b]
wordToGFlags CUInt
val
    [VideoTimeCodeFlags] -> IO [VideoTimeCodeFlags]
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return [VideoTimeCodeFlags]
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' videoTimeCodeConfig [ #flags 'Data.GI.Base.Attributes.:=' value ]
-- @
setVideoTimeCodeConfigFlags :: MonadIO m => VideoTimeCodeConfig -> [GstVideo.Flags.VideoTimeCodeFlags] -> m ()
setVideoTimeCodeConfigFlags :: forall (m :: * -> *).
MonadIO m =>
VideoTimeCodeConfig -> [VideoTimeCodeFlags] -> m ()
setVideoTimeCodeConfigFlags VideoTimeCodeConfig
s [VideoTimeCodeFlags]
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
$ VideoTimeCodeConfig -> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO ()) -> IO ())
-> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    let val' :: CUInt
val' = [VideoTimeCodeFlags] -> CUInt
forall b a. (Num b, IsGFlag a) => [a] -> b
gflagsToWord [VideoTimeCodeFlags]
val
    Ptr CUInt -> CUInt -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr CUInt
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8) (CUInt
val' :: CUInt)

#if defined(ENABLE_OVERLOADING)
data VideoTimeCodeConfigFlagsFieldInfo
instance AttrInfo VideoTimeCodeConfigFlagsFieldInfo where
    type AttrBaseTypeConstraint VideoTimeCodeConfigFlagsFieldInfo = (~) VideoTimeCodeConfig
    type AttrAllowedOps VideoTimeCodeConfigFlagsFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint VideoTimeCodeConfigFlagsFieldInfo = (~) [GstVideo.Flags.VideoTimeCodeFlags]
    type AttrTransferTypeConstraint VideoTimeCodeConfigFlagsFieldInfo = (~)[GstVideo.Flags.VideoTimeCodeFlags]
    type AttrTransferType VideoTimeCodeConfigFlagsFieldInfo = [GstVideo.Flags.VideoTimeCodeFlags]
    type AttrGetType VideoTimeCodeConfigFlagsFieldInfo = [GstVideo.Flags.VideoTimeCodeFlags]
    type AttrLabel VideoTimeCodeConfigFlagsFieldInfo = "flags"
    type AttrOrigin VideoTimeCodeConfigFlagsFieldInfo = VideoTimeCodeConfig
    attrGet = getVideoTimeCodeConfigFlags
    attrSet = setVideoTimeCodeConfigFlags
    attrConstruct = undefined
    attrClear = undefined
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstVideo.Structs.VideoTimeCodeConfig.flags"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstvideo-1.0.28/docs/GI-GstVideo-Structs-VideoTimeCodeConfig.html#g:attr:flags"
        })

videoTimeCodeConfig_flags :: AttrLabelProxy "flags"
videoTimeCodeConfig_flags = AttrLabelProxy

#endif


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

-- | Set the value of the “@latest_daily_jam@” field.
-- When <https://github.com/haskell-gi/haskell-gi/wiki/Overloading overloading> is enabled, this is equivalent to
-- 
-- @
-- 'Data.GI.Base.Attributes.set' videoTimeCodeConfig [ #latestDailyJam 'Data.GI.Base.Attributes.:=' value ]
-- @
setVideoTimeCodeConfigLatestDailyJam :: MonadIO m => VideoTimeCodeConfig -> Ptr GLib.DateTime.DateTime -> m ()
setVideoTimeCodeConfigLatestDailyJam :: forall (m :: * -> *).
MonadIO m =>
VideoTimeCodeConfig -> Ptr DateTime -> m ()
setVideoTimeCodeConfigLatestDailyJam VideoTimeCodeConfig
s Ptr DateTime
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
$ VideoTimeCodeConfig -> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO ()) -> IO ())
-> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Ptr (Ptr DateTime) -> Ptr DateTime -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr (Ptr DateTime)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) (Ptr DateTime
val :: Ptr GLib.DateTime.DateTime)

-- | Set the value of the “@latest_daily_jam@” 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' #latestDailyJam
-- @
clearVideoTimeCodeConfigLatestDailyJam :: MonadIO m => VideoTimeCodeConfig -> m ()
clearVideoTimeCodeConfigLatestDailyJam :: forall (m :: * -> *). MonadIO m => VideoTimeCodeConfig -> m ()
clearVideoTimeCodeConfigLatestDailyJam VideoTimeCodeConfig
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
$ VideoTimeCodeConfig -> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
s ((Ptr VideoTimeCodeConfig -> IO ()) -> IO ())
-> (Ptr VideoTimeCodeConfig -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr VideoTimeCodeConfig
ptr -> do
    Ptr (Ptr DateTime) -> Ptr DateTime -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr VideoTimeCodeConfig
ptr Ptr VideoTimeCodeConfig -> Int -> Ptr (Ptr DateTime)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16) (Ptr DateTime
forall a. Ptr a
FP.nullPtr :: Ptr GLib.DateTime.DateTime)

#if defined(ENABLE_OVERLOADING)
data VideoTimeCodeConfigLatestDailyJamFieldInfo
instance AttrInfo VideoTimeCodeConfigLatestDailyJamFieldInfo where
    type AttrBaseTypeConstraint VideoTimeCodeConfigLatestDailyJamFieldInfo = (~) VideoTimeCodeConfig
    type AttrAllowedOps VideoTimeCodeConfigLatestDailyJamFieldInfo = '[ 'AttrSet, 'AttrGet, 'AttrClear]
    type AttrSetTypeConstraint VideoTimeCodeConfigLatestDailyJamFieldInfo = (~) (Ptr GLib.DateTime.DateTime)
    type AttrTransferTypeConstraint VideoTimeCodeConfigLatestDailyJamFieldInfo = (~)(Ptr GLib.DateTime.DateTime)
    type AttrTransferType VideoTimeCodeConfigLatestDailyJamFieldInfo = (Ptr GLib.DateTime.DateTime)
    type AttrGetType VideoTimeCodeConfigLatestDailyJamFieldInfo = Maybe GLib.DateTime.DateTime
    type AttrLabel VideoTimeCodeConfigLatestDailyJamFieldInfo = "latest_daily_jam"
    type AttrOrigin VideoTimeCodeConfigLatestDailyJamFieldInfo = VideoTimeCodeConfig
    attrGet = getVideoTimeCodeConfigLatestDailyJam
    attrSet = setVideoTimeCodeConfigLatestDailyJam
    attrConstruct = undefined
    attrClear = clearVideoTimeCodeConfigLatestDailyJam
    attrTransfer _ v = do
        return v
    dbgAttrInfo = P.Just (O.ResolvedSymbolInfo {
        O.resolvedSymbolName = "GI.GstVideo.Structs.VideoTimeCodeConfig.latestDailyJam"
        , O.resolvedSymbolURL = "https://hackage.haskell.org/package/gi-gstvideo-1.0.28/docs/GI-GstVideo-Structs-VideoTimeCodeConfig.html#g:attr:latestDailyJam"
        })

videoTimeCodeConfig_latestDailyJam :: AttrLabelProxy "latestDailyJam"
videoTimeCodeConfig_latestDailyJam = AttrLabelProxy

#endif



#if defined(ENABLE_OVERLOADING)
instance O.HasAttributeList VideoTimeCodeConfig
type instance O.AttributeList VideoTimeCodeConfig = VideoTimeCodeConfigAttributeList
type VideoTimeCodeConfigAttributeList = ('[ '("fpsN", VideoTimeCodeConfigFpsNFieldInfo), '("fpsD", VideoTimeCodeConfigFpsDFieldInfo), '("flags", VideoTimeCodeConfigFlagsFieldInfo), '("latestDailyJam", VideoTimeCodeConfigLatestDailyJamFieldInfo)] :: [(Symbol, DK.Type)])
#endif

#if defined(ENABLE_OVERLOADING)
type family ResolveVideoTimeCodeConfigMethod (t :: Symbol) (o :: DK.Type) :: DK.Type where
    ResolveVideoTimeCodeConfigMethod l o = O.MethodResolutionFailed l o

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

#endif

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

#endif