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

A list of statistics for each transaction that may be
interesting for reporting purposes.
-}

module GI.OSTree.Structs.RepoTransactionStats
    ( 

-- * Exported types
    RepoTransactionStats(..)                ,
    newZeroRepoTransactionStats             ,
    noRepoTransactionStats                  ,


 -- * Properties
-- ** contentBytesWritten #attr:contentBytesWritten#
    getRepoTransactionStatsContentBytesWritten,
    repoTransactionStats_contentBytesWritten,
    setRepoTransactionStatsContentBytesWritten,


-- ** contentObjectsTotal #attr:contentObjectsTotal#
    getRepoTransactionStatsContentObjectsTotal,
    repoTransactionStats_contentObjectsTotal,
    setRepoTransactionStatsContentObjectsTotal,


-- ** contentObjectsWritten #attr:contentObjectsWritten#
    getRepoTransactionStatsContentObjectsWritten,
    repoTransactionStats_contentObjectsWritten,
    setRepoTransactionStatsContentObjectsWritten,


-- ** metadataObjectsTotal #attr:metadataObjectsTotal#
    getRepoTransactionStatsMetadataObjectsTotal,
    repoTransactionStats_metadataObjectsTotal,
    setRepoTransactionStatsMetadataObjectsTotal,


-- ** metadataObjectsWritten #attr:metadataObjectsWritten#
    getRepoTransactionStatsMetadataObjectsWritten,
    repoTransactionStats_metadataObjectsWritten,
    setRepoTransactionStatsMetadataObjectsWritten,


-- ** padding1 #attr:padding1#
    getRepoTransactionStatsPadding1         ,
    repoTransactionStats_padding1           ,
    setRepoTransactionStatsPadding1         ,


-- ** padding2 #attr:padding2#
    getRepoTransactionStatsPadding2         ,
    repoTransactionStats_padding2           ,
    setRepoTransactionStatsPadding2         ,


-- ** padding3 #attr:padding3#
    getRepoTransactionStatsPadding3         ,
    repoTransactionStats_padding3           ,
    setRepoTransactionStatsPadding3         ,


-- ** padding4 #attr:padding4#
    getRepoTransactionStatsPadding4         ,
    repoTransactionStats_padding4           ,
    setRepoTransactionStatsPadding4         ,




    ) 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.GError as B.GError
import qualified Data.GI.Base.GVariant as B.GVariant
import qualified Data.GI.Base.GParamSpec as B.GParamSpec
import qualified Data.GI.Base.CallStack as B.CallStack
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


newtype RepoTransactionStats = RepoTransactionStats (ManagedPtr RepoTransactionStats)
foreign import ccall "ostree_repo_transaction_stats_get_type" c_ostree_repo_transaction_stats_get_type :: 
    IO GType

instance BoxedObject RepoTransactionStats where
    boxedType _ = c_ostree_repo_transaction_stats_get_type

-- | Construct a `RepoTransactionStats` struct initialized to zero.
newZeroRepoTransactionStats :: MonadIO m => m RepoTransactionStats
newZeroRepoTransactionStats = liftIO $ callocBoxedBytes 56 >>= wrapBoxed RepoTransactionStats

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


noRepoTransactionStats :: Maybe RepoTransactionStats
noRepoTransactionStats = Nothing

getRepoTransactionStatsMetadataObjectsTotal :: MonadIO m => RepoTransactionStats -> m Word32
getRepoTransactionStatsMetadataObjectsTotal s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 0) :: IO Word32
    return val

setRepoTransactionStatsMetadataObjectsTotal :: MonadIO m => RepoTransactionStats -> Word32 -> m ()
setRepoTransactionStatsMetadataObjectsTotal s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 0) (val :: Word32)

data RepoTransactionStatsMetadataObjectsTotalFieldInfo
instance AttrInfo RepoTransactionStatsMetadataObjectsTotalFieldInfo where
    type AttrAllowedOps RepoTransactionStatsMetadataObjectsTotalFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsMetadataObjectsTotalFieldInfo = (~) Word32
    type AttrBaseTypeConstraint RepoTransactionStatsMetadataObjectsTotalFieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsMetadataObjectsTotalFieldInfo = Word32
    type AttrLabel RepoTransactionStatsMetadataObjectsTotalFieldInfo = "metadata_objects_total"
    type AttrOrigin RepoTransactionStatsMetadataObjectsTotalFieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsMetadataObjectsTotal
    attrSet _ = setRepoTransactionStatsMetadataObjectsTotal
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_metadataObjectsTotal :: AttrLabelProxy "metadataObjectsTotal"
repoTransactionStats_metadataObjectsTotal = AttrLabelProxy


getRepoTransactionStatsMetadataObjectsWritten :: MonadIO m => RepoTransactionStats -> m Word32
getRepoTransactionStatsMetadataObjectsWritten s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 4) :: IO Word32
    return val

setRepoTransactionStatsMetadataObjectsWritten :: MonadIO m => RepoTransactionStats -> Word32 -> m ()
setRepoTransactionStatsMetadataObjectsWritten s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 4) (val :: Word32)

data RepoTransactionStatsMetadataObjectsWrittenFieldInfo
instance AttrInfo RepoTransactionStatsMetadataObjectsWrittenFieldInfo where
    type AttrAllowedOps RepoTransactionStatsMetadataObjectsWrittenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsMetadataObjectsWrittenFieldInfo = (~) Word32
    type AttrBaseTypeConstraint RepoTransactionStatsMetadataObjectsWrittenFieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsMetadataObjectsWrittenFieldInfo = Word32
    type AttrLabel RepoTransactionStatsMetadataObjectsWrittenFieldInfo = "metadata_objects_written"
    type AttrOrigin RepoTransactionStatsMetadataObjectsWrittenFieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsMetadataObjectsWritten
    attrSet _ = setRepoTransactionStatsMetadataObjectsWritten
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_metadataObjectsWritten :: AttrLabelProxy "metadataObjectsWritten"
repoTransactionStats_metadataObjectsWritten = AttrLabelProxy


getRepoTransactionStatsContentObjectsTotal :: MonadIO m => RepoTransactionStats -> m Word32
getRepoTransactionStatsContentObjectsTotal s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 8) :: IO Word32
    return val

setRepoTransactionStatsContentObjectsTotal :: MonadIO m => RepoTransactionStats -> Word32 -> m ()
setRepoTransactionStatsContentObjectsTotal s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 8) (val :: Word32)

data RepoTransactionStatsContentObjectsTotalFieldInfo
instance AttrInfo RepoTransactionStatsContentObjectsTotalFieldInfo where
    type AttrAllowedOps RepoTransactionStatsContentObjectsTotalFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsContentObjectsTotalFieldInfo = (~) Word32
    type AttrBaseTypeConstraint RepoTransactionStatsContentObjectsTotalFieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsContentObjectsTotalFieldInfo = Word32
    type AttrLabel RepoTransactionStatsContentObjectsTotalFieldInfo = "content_objects_total"
    type AttrOrigin RepoTransactionStatsContentObjectsTotalFieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsContentObjectsTotal
    attrSet _ = setRepoTransactionStatsContentObjectsTotal
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_contentObjectsTotal :: AttrLabelProxy "contentObjectsTotal"
repoTransactionStats_contentObjectsTotal = AttrLabelProxy


getRepoTransactionStatsContentObjectsWritten :: MonadIO m => RepoTransactionStats -> m Word32
getRepoTransactionStatsContentObjectsWritten s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 12) :: IO Word32
    return val

setRepoTransactionStatsContentObjectsWritten :: MonadIO m => RepoTransactionStats -> Word32 -> m ()
setRepoTransactionStatsContentObjectsWritten s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 12) (val :: Word32)

data RepoTransactionStatsContentObjectsWrittenFieldInfo
instance AttrInfo RepoTransactionStatsContentObjectsWrittenFieldInfo where
    type AttrAllowedOps RepoTransactionStatsContentObjectsWrittenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsContentObjectsWrittenFieldInfo = (~) Word32
    type AttrBaseTypeConstraint RepoTransactionStatsContentObjectsWrittenFieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsContentObjectsWrittenFieldInfo = Word32
    type AttrLabel RepoTransactionStatsContentObjectsWrittenFieldInfo = "content_objects_written"
    type AttrOrigin RepoTransactionStatsContentObjectsWrittenFieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsContentObjectsWritten
    attrSet _ = setRepoTransactionStatsContentObjectsWritten
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_contentObjectsWritten :: AttrLabelProxy "contentObjectsWritten"
repoTransactionStats_contentObjectsWritten = AttrLabelProxy


getRepoTransactionStatsContentBytesWritten :: MonadIO m => RepoTransactionStats -> m Word64
getRepoTransactionStatsContentBytesWritten s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 16) :: IO Word64
    return val

setRepoTransactionStatsContentBytesWritten :: MonadIO m => RepoTransactionStats -> Word64 -> m ()
setRepoTransactionStatsContentBytesWritten s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 16) (val :: Word64)

data RepoTransactionStatsContentBytesWrittenFieldInfo
instance AttrInfo RepoTransactionStatsContentBytesWrittenFieldInfo where
    type AttrAllowedOps RepoTransactionStatsContentBytesWrittenFieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsContentBytesWrittenFieldInfo = (~) Word64
    type AttrBaseTypeConstraint RepoTransactionStatsContentBytesWrittenFieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsContentBytesWrittenFieldInfo = Word64
    type AttrLabel RepoTransactionStatsContentBytesWrittenFieldInfo = "content_bytes_written"
    type AttrOrigin RepoTransactionStatsContentBytesWrittenFieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsContentBytesWritten
    attrSet _ = setRepoTransactionStatsContentBytesWritten
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_contentBytesWritten :: AttrLabelProxy "contentBytesWritten"
repoTransactionStats_contentBytesWritten = AttrLabelProxy


getRepoTransactionStatsPadding1 :: MonadIO m => RepoTransactionStats -> m Word64
getRepoTransactionStatsPadding1 s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 24) :: IO Word64
    return val

setRepoTransactionStatsPadding1 :: MonadIO m => RepoTransactionStats -> Word64 -> m ()
setRepoTransactionStatsPadding1 s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 24) (val :: Word64)

data RepoTransactionStatsPadding1FieldInfo
instance AttrInfo RepoTransactionStatsPadding1FieldInfo where
    type AttrAllowedOps RepoTransactionStatsPadding1FieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsPadding1FieldInfo = (~) Word64
    type AttrBaseTypeConstraint RepoTransactionStatsPadding1FieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsPadding1FieldInfo = Word64
    type AttrLabel RepoTransactionStatsPadding1FieldInfo = "padding1"
    type AttrOrigin RepoTransactionStatsPadding1FieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsPadding1
    attrSet _ = setRepoTransactionStatsPadding1
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_padding1 :: AttrLabelProxy "padding1"
repoTransactionStats_padding1 = AttrLabelProxy


getRepoTransactionStatsPadding2 :: MonadIO m => RepoTransactionStats -> m Word64
getRepoTransactionStatsPadding2 s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 32) :: IO Word64
    return val

setRepoTransactionStatsPadding2 :: MonadIO m => RepoTransactionStats -> Word64 -> m ()
setRepoTransactionStatsPadding2 s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 32) (val :: Word64)

data RepoTransactionStatsPadding2FieldInfo
instance AttrInfo RepoTransactionStatsPadding2FieldInfo where
    type AttrAllowedOps RepoTransactionStatsPadding2FieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsPadding2FieldInfo = (~) Word64
    type AttrBaseTypeConstraint RepoTransactionStatsPadding2FieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsPadding2FieldInfo = Word64
    type AttrLabel RepoTransactionStatsPadding2FieldInfo = "padding2"
    type AttrOrigin RepoTransactionStatsPadding2FieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsPadding2
    attrSet _ = setRepoTransactionStatsPadding2
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_padding2 :: AttrLabelProxy "padding2"
repoTransactionStats_padding2 = AttrLabelProxy


getRepoTransactionStatsPadding3 :: MonadIO m => RepoTransactionStats -> m Word64
getRepoTransactionStatsPadding3 s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 40) :: IO Word64
    return val

setRepoTransactionStatsPadding3 :: MonadIO m => RepoTransactionStats -> Word64 -> m ()
setRepoTransactionStatsPadding3 s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 40) (val :: Word64)

data RepoTransactionStatsPadding3FieldInfo
instance AttrInfo RepoTransactionStatsPadding3FieldInfo where
    type AttrAllowedOps RepoTransactionStatsPadding3FieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsPadding3FieldInfo = (~) Word64
    type AttrBaseTypeConstraint RepoTransactionStatsPadding3FieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsPadding3FieldInfo = Word64
    type AttrLabel RepoTransactionStatsPadding3FieldInfo = "padding3"
    type AttrOrigin RepoTransactionStatsPadding3FieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsPadding3
    attrSet _ = setRepoTransactionStatsPadding3
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_padding3 :: AttrLabelProxy "padding3"
repoTransactionStats_padding3 = AttrLabelProxy


getRepoTransactionStatsPadding4 :: MonadIO m => RepoTransactionStats -> m Word64
getRepoTransactionStatsPadding4 s = liftIO $ withManagedPtr s $ \ptr -> do
    val <- peek (ptr `plusPtr` 48) :: IO Word64
    return val

setRepoTransactionStatsPadding4 :: MonadIO m => RepoTransactionStats -> Word64 -> m ()
setRepoTransactionStatsPadding4 s val = liftIO $ withManagedPtr s $ \ptr -> do
    poke (ptr `plusPtr` 48) (val :: Word64)

data RepoTransactionStatsPadding4FieldInfo
instance AttrInfo RepoTransactionStatsPadding4FieldInfo where
    type AttrAllowedOps RepoTransactionStatsPadding4FieldInfo = '[ 'AttrSet, 'AttrGet]
    type AttrSetTypeConstraint RepoTransactionStatsPadding4FieldInfo = (~) Word64
    type AttrBaseTypeConstraint RepoTransactionStatsPadding4FieldInfo = (~) RepoTransactionStats
    type AttrGetType RepoTransactionStatsPadding4FieldInfo = Word64
    type AttrLabel RepoTransactionStatsPadding4FieldInfo = "padding4"
    type AttrOrigin RepoTransactionStatsPadding4FieldInfo = RepoTransactionStats
    attrGet _ = getRepoTransactionStatsPadding4
    attrSet _ = setRepoTransactionStatsPadding4
    attrConstruct = undefined
    attrClear _ = undefined

repoTransactionStats_padding4 :: AttrLabelProxy "padding4"
repoTransactionStats_padding4 = AttrLabelProxy



instance O.HasAttributeList RepoTransactionStats
type instance O.AttributeList RepoTransactionStats = RepoTransactionStatsAttributeList
type RepoTransactionStatsAttributeList = ('[ '("metadataObjectsTotal", RepoTransactionStatsMetadataObjectsTotalFieldInfo), '("metadataObjectsWritten", RepoTransactionStatsMetadataObjectsWrittenFieldInfo), '("contentObjectsTotal", RepoTransactionStatsContentObjectsTotalFieldInfo), '("contentObjectsWritten", RepoTransactionStatsContentObjectsWrittenFieldInfo), '("contentBytesWritten", RepoTransactionStatsContentBytesWrittenFieldInfo), '("padding1", RepoTransactionStatsPadding1FieldInfo), '("padding2", RepoTransactionStatsPadding2FieldInfo), '("padding3", RepoTransactionStatsPadding3FieldInfo), '("padding4", RepoTransactionStatsPadding4FieldInfo)] :: [(Symbol, *)])

type family ResolveRepoTransactionStatsMethod (t :: Symbol) (o :: *) :: * where
    ResolveRepoTransactionStatsMethod l o = O.MethodResolutionFailed l o

instance (info ~ ResolveRepoTransactionStatsMethod t RepoTransactionStats, O.MethodInfo info RepoTransactionStats p) => O.IsLabelProxy t (RepoTransactionStats -> p) where
    fromLabelProxy _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)

#if MIN_VERSION_base(4,9,0)
instance (info ~ ResolveRepoTransactionStatsMethod t RepoTransactionStats, O.MethodInfo info RepoTransactionStats p) => O.IsLabel t (RepoTransactionStats -> p) where
    fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info)
#endif