{-# LANGUAGE TypeApplications #-}


-- | Copyright  : Will Thompson, Iñaki García Etxebarria and Jonas Platte
-- 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              ,
    noVideoTimeCodeConfig                   ,


 -- * Methods
-- ** Overloaded methods #method:Overloaded 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.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.GI.Base.Signals as B.Signals
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.GLib.Structs.DateTime as GLib.DateTime
import {-# SOURCE #-} qualified GI.GstVideo.Flags as GstVideo.Flags

-- | Memory-managed wrapper type.
newtype VideoTimeCodeConfig = VideoTimeCodeConfig (ManagedPtr VideoTimeCodeConfig)
    deriving (VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool
(VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool)
-> (VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool)
-> Eq VideoTimeCodeConfig
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool
$c/= :: VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool
== :: VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool
$c== :: VideoTimeCodeConfig -> VideoTimeCodeConfig -> Bool
Eq)
instance WrappedPtr VideoTimeCodeConfig where
    wrappedPtrCalloc :: IO (Ptr VideoTimeCodeConfig)
wrappedPtrCalloc = Int -> IO (Ptr VideoTimeCodeConfig)
forall a. Int -> IO (Ptr a)
callocBytes 24
    wrappedPtrCopy :: VideoTimeCodeConfig -> IO VideoTimeCodeConfig
wrappedPtrCopy = \p :: VideoTimeCodeConfig
p -> VideoTimeCodeConfig
-> (Ptr VideoTimeCodeConfig -> IO VideoTimeCodeConfig)
-> IO VideoTimeCodeConfig
forall a c.
(HasCallStack, ManagedPtrNewtype a) =>
a -> (Ptr a -> IO c) -> IO c
withManagedPtr VideoTimeCodeConfig
p (Int -> Ptr VideoTimeCodeConfig -> IO (Ptr VideoTimeCodeConfig)
forall a. WrappedPtr a => Int -> Ptr a -> IO (Ptr a)
copyBytes 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, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr VideoTimeCodeConfig -> VideoTimeCodeConfig
VideoTimeCodeConfig)
    wrappedPtrFree :: Maybe (GDestroyNotify VideoTimeCodeConfig)
wrappedPtrFree = GDestroyNotify VideoTimeCodeConfig
-> Maybe (GDestroyNotify VideoTimeCodeConfig)
forall a. a -> Maybe a
Just GDestroyNotify VideoTimeCodeConfig
forall a. FunPtr (Ptr a -> IO ())
ptr_to_g_free

-- | Construct a `VideoTimeCodeConfig` struct initialized to zero.
newZeroVideoTimeCodeConfig :: MonadIO m => m VideoTimeCodeConfig
newZeroVideoTimeCodeConfig :: m VideoTimeCodeConfig
newZeroVideoTimeCodeConfig = IO VideoTimeCodeConfig -> m VideoTimeCodeConfig
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. WrappedPtr a => IO (Ptr a)
wrappedPtrCalloc IO (Ptr VideoTimeCodeConfig)
-> (Ptr VideoTimeCodeConfig -> IO VideoTimeCodeConfig)
-> IO VideoTimeCodeConfig
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= (ManagedPtr VideoTimeCodeConfig -> VideoTimeCodeConfig)
-> Ptr VideoTimeCodeConfig -> IO VideoTimeCodeConfig
forall a.
(HasCallStack, WrappedPtr a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
wrapPtr ManagedPtr VideoTimeCodeConfig -> VideoTimeCodeConfig
VideoTimeCodeConfig

instance tag ~ 'AttrSet => Constructible VideoTimeCodeConfig tag where
    new :: (ManagedPtr VideoTimeCodeConfig -> VideoTimeCodeConfig)
-> [AttrOp VideoTimeCodeConfig tag] -> m VideoTimeCodeConfig
new _ attrs :: [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 (m :: * -> *) a. Monad m => a -> m a
return VideoTimeCodeConfig
o


-- | A convenience alias for `Nothing` :: `Maybe` `VideoTimeCodeConfig`.
noVideoTimeCodeConfig :: Maybe VideoTimeCodeConfig
noVideoTimeCodeConfig :: Maybe VideoTimeCodeConfig
noVideoTimeCodeConfig = Maybe VideoTimeCodeConfig
forall a. Maybe a
Nothing

-- | 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 :: VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsN s :: VideoTimeCodeConfig
s = IO Word32 -> m Word32
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 :: 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` 0) :: IO Word32
    Word32 -> IO Word32
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 :: VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsN s :: VideoTimeCodeConfig
s val :: Word32
val = IO () -> m ()
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 :: 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` 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

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 :: VideoTimeCodeConfig -> m Word32
getVideoTimeCodeConfigFpsD s :: VideoTimeCodeConfig
s = IO Word32 -> m Word32
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 :: 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` 4) :: IO Word32
    Word32 -> IO Word32
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 :: VideoTimeCodeConfig -> Word32 -> m ()
setVideoTimeCodeConfigFpsD s :: VideoTimeCodeConfig
s val :: Word32
val = IO () -> m ()
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 :: 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` 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

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 :: VideoTimeCodeConfig -> m [VideoTimeCodeFlags]
getVideoTimeCodeConfigFlags s :: VideoTimeCodeConfig
s = IO [VideoTimeCodeFlags] -> m [VideoTimeCodeFlags]
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 :: 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` 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 (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 :: VideoTimeCodeConfig -> [VideoTimeCodeFlags] -> m ()
setVideoTimeCodeConfigFlags s :: VideoTimeCodeConfig
s val :: [VideoTimeCodeFlags]
val = IO () -> m ()
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 :: 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` 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

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 :: VideoTimeCodeConfig -> m (Maybe DateTime)
getVideoTimeCodeConfigLatestDailyJam s :: VideoTimeCodeConfig
s = IO (Maybe DateTime) -> m (Maybe DateTime)
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 :: 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` 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
$ \val' :: Ptr DateTime
val' -> do
        DateTime
val'' <- ((ManagedPtr DateTime -> DateTime) -> Ptr DateTime -> IO DateTime
forall a.
(HasCallStack, BoxedObject a) =>
(ManagedPtr a -> a) -> Ptr a -> IO a
newBoxed ManagedPtr DateTime -> DateTime
GLib.DateTime.DateTime) Ptr DateTime
val'
        DateTime -> IO DateTime
forall (m :: * -> *) a. Monad m => a -> m a
return DateTime
val''
    Maybe DateTime -> IO (Maybe DateTime)
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 :: VideoTimeCodeConfig -> Ptr DateTime -> m ()
setVideoTimeCodeConfigLatestDailyJam s :: VideoTimeCodeConfig
s val :: Ptr DateTime
val = IO () -> m ()
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 :: 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` 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 :: VideoTimeCodeConfig -> m ()
clearVideoTimeCodeConfigLatestDailyJam s :: VideoTimeCodeConfig
s = IO () -> m ()
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 :: 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` 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

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, *)])
#endif

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

instance (info ~ ResolveVideoTimeCodeConfigMethod t VideoTimeCodeConfig, O.MethodInfo 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

#endif