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

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

module GI.OSTree.Functions
    (

 -- * Methods
-- ** breakHardlink #method:breakHardlink#

    breakHardlink                           ,


-- ** checkVersion #method:checkVersion#

    checkVersion                            ,


-- ** checksumB64FromBytes #method:checksumB64FromBytes#

    checksumB64FromBytes                    ,


-- ** checksumB64ToBytes #method:checksumB64ToBytes#

    checksumB64ToBytes                      ,


-- ** checksumBytesPeek #method:checksumBytesPeek#

    checksumBytesPeek                       ,


-- ** checksumBytesPeekValidate #method:checksumBytesPeekValidate#

    checksumBytesPeekValidate               ,


-- ** checksumFile #method:checksumFile#

    checksumFile                            ,


-- ** checksumFileAsync #method:checksumFileAsync#

    checksumFileAsync                       ,


-- ** checksumFileAsyncFinish #method:checksumFileAsyncFinish#

    checksumFileAsyncFinish                 ,


-- ** checksumFileAt #method:checksumFileAt#

    checksumFileAt                          ,


-- ** checksumFileFromInput #method:checksumFileFromInput#

    checksumFileFromInput                   ,


-- ** checksumFromBytes #method:checksumFromBytes#

    checksumFromBytes                       ,


-- ** checksumFromBytesV #method:checksumFromBytesV#

    checksumFromBytesV                      ,


-- ** checksumInplaceToBytes #method:checksumInplaceToBytes#

    checksumInplaceToBytes                  ,


-- ** checksumToBytes #method:checksumToBytes#

    checksumToBytes                         ,


-- ** checksumToBytesV #method:checksumToBytesV#

    checksumToBytesV                        ,


-- ** cmd_Private__ #method:cmd_Private__#

    cmd_Private__                           ,


-- ** cmpChecksumBytes #method:cmpChecksumBytes#

    cmpChecksumBytes                        ,


-- ** commitGetContentChecksum #method:commitGetContentChecksum#

    commitGetContentChecksum                ,


-- ** commitGetParent #method:commitGetParent#

    commitGetParent                         ,


-- ** commitGetTimestamp #method:commitGetTimestamp#

    commitGetTimestamp                      ,


-- ** contentFileParse #method:contentFileParse#

    contentFileParse                        ,


-- ** contentFileParseAt #method:contentFileParseAt#

    contentFileParseAt                      ,


-- ** contentStreamParse #method:contentStreamParse#

    contentStreamParse                      ,


-- ** createDirectoryMetadata #method:createDirectoryMetadata#

    createDirectoryMetadata                 ,


-- ** diffDirs #method:diffDirs#

    diffDirs                                ,


-- ** diffDirsWithOptions #method:diffDirsWithOptions#

    diffDirsWithOptions                     ,


-- ** diffPrint #method:diffPrint#

    diffPrint                               ,


-- ** gpgErrorQuark #method:gpgErrorQuark#

    gpgErrorQuark                           ,


-- ** hashObjectName #method:hashObjectName#

    hashObjectName                          ,


-- ** metadataVariantType #method:metadataVariantType#

    metadataVariantType                     ,


-- ** objectFromString #method:objectFromString#

    objectFromString                        ,


-- ** objectNameDeserialize #method:objectNameDeserialize#

    objectNameDeserialize                   ,


-- ** objectNameSerialize #method:objectNameSerialize#

    objectNameSerialize                     ,


-- ** objectToString #method:objectToString#

    objectToString                          ,


-- ** objectTypeFromString #method:objectTypeFromString#

    objectTypeFromString                    ,


-- ** objectTypeToString #method:objectTypeToString#

    objectTypeToString                      ,


-- ** parseRefspec #method:parseRefspec#

    parseRefspec                            ,


-- ** rawFileToArchiveZ2Stream #method:rawFileToArchiveZ2Stream#

    rawFileToArchiveZ2Stream                ,


-- ** rawFileToArchiveZ2StreamWithOptions #method:rawFileToArchiveZ2StreamWithOptions#

    rawFileToArchiveZ2StreamWithOptions     ,


-- ** rawFileToContentStream #method:rawFileToContentStream#

    rawFileToContentStream                  ,


-- ** validateChecksumString #method:validateChecksumString#

    validateChecksumString                  ,


-- ** validateCollectionId #method:validateCollectionId#

    validateCollectionId                    ,


-- ** validateRemoteName #method:validateRemoteName#

    validateRemoteName                      ,


-- ** validateRev #method:validateRev#

    validateRev                             ,


-- ** validateStructureofChecksumString #method:validateStructureofChecksumString#

    validateStructureofChecksumString       ,


-- ** validateStructureofCommit #method:validateStructureofCommit#

    validateStructureofCommit               ,


-- ** validateStructureofCsumV #method:validateStructureofCsumV#

    validateStructureofCsumV                ,


-- ** validateStructureofDirmeta #method:validateStructureofDirmeta#

    validateStructureofDirmeta              ,


-- ** validateStructureofDirtree #method:validateStructureofDirtree#

    validateStructureofDirtree              ,


-- ** validateStructureofFileMode #method:validateStructureofFileMode#

    validateStructureofFileMode             ,


-- ** validateStructureofObjtype #method:validateStructureofObjtype#

    validateStructureofObjtype              ,




    ) 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.GLib.Structs.VariantType as GLib.VariantType
import qualified GI.Gio.Callbacks as Gio.Callbacks
import qualified GI.Gio.Interfaces.AsyncResult as Gio.AsyncResult
import qualified GI.Gio.Interfaces.File as Gio.File
import qualified GI.Gio.Objects.Cancellable as Gio.Cancellable
import qualified GI.Gio.Objects.FileInfo as Gio.FileInfo
import qualified GI.Gio.Objects.InputStream as Gio.InputStream
import {-# SOURCE #-} qualified GI.OSTree.Enums as OSTree.Enums
import {-# SOURCE #-} qualified GI.OSTree.Flags as OSTree.Flags
import {-# SOURCE #-} qualified GI.OSTree.Structs.CmdPrivateVTable as OSTree.CmdPrivateVTable
import {-# SOURCE #-} qualified GI.OSTree.Structs.DiffDirsOptions as OSTree.DiffDirsOptions
import {-# SOURCE #-} qualified GI.OSTree.Structs.DiffItem as OSTree.DiffItem

-- function ostree_validate_structureof_objtype
-- Args : [Arg {argCName = "objtype", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_objtype" ostree_validate_structureof_objtype ::
    Word8 ->                                -- objtype : TBasicType TUInt8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./
-}
validateStructureofObjtype ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Word8
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofObjtype objtype = liftIO $ do
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_objtype objtype
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_file_mode
-- Args : [Arg {argCName = "mode", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A Unix filesystem mode", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_file_mode" ostree_validate_structureof_file_mode ::
    Word32 ->                               -- mode : TBasicType TUInt32
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./
-}
validateStructureofFileMode ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Word32
    {- ^ /@mode@/: A Unix filesystem mode -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofFileMode mode = liftIO $ do
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_file_mode mode
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_dirtree
-- Args : [Arg {argCName = "dirtree", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A dirtree object, %OSTREE_OBJECT_TYPE_DIR_TREE", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_dirtree" ostree_validate_structureof_dirtree ::
    Ptr GVariant ->                         -- dirtree : TVariant
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Use this to validate the basic structure of /@dirtree@/, independent of
any other objects it references.
-}
validateStructureofDirtree ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@dirtree@/: A dirtree object, 'GI.OSTree.Enums.ObjectTypeDirTree' -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofDirtree dirtree = liftIO $ do
    dirtree' <- unsafeManagedPtrGetPtr dirtree
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_dirtree dirtree'
        touchManagedPtr dirtree
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_dirmeta
-- Args : [Arg {argCName = "dirmeta", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A dirmeta object, %OSTREE_OBJECT_TYPE_DIR_META", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_dirmeta" ostree_validate_structureof_dirmeta ::
    Ptr GVariant ->                         -- dirmeta : TVariant
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Use this to validate the basic structure of /@dirmeta@/.
-}
validateStructureofDirmeta ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@dirmeta@/: A dirmeta object, 'GI.OSTree.Enums.ObjectTypeDirMeta' -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofDirmeta dirmeta = liftIO $ do
    dirmeta' <- unsafeManagedPtrGetPtr dirmeta
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_dirmeta dirmeta'
        touchManagedPtr dirmeta
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_csum_v
-- Args : [Arg {argCName = "checksum", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GVariant of type \"ay\"", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_csum_v" ostree_validate_structureof_csum_v ::
    Ptr GVariant ->                         -- checksum : TVariant
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./
-}
validateStructureofCsumV ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@checksum@/: a 'GVariant' of type \"ay\" -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofCsumV checksum = liftIO $ do
    checksum' <- unsafeManagedPtrGetPtr checksum
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_csum_v checksum'
        touchManagedPtr checksum
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_commit
-- Args : [Arg {argCName = "commit", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A commit object, %OSTREE_OBJECT_TYPE_COMMIT", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_commit" ostree_validate_structureof_commit ::
    Ptr GVariant ->                         -- commit : TVariant
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Use this to validate the basic structure of /@commit@/, independent of
any other objects it references.
-}
validateStructureofCommit ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@commit@/: A commit object, 'GI.OSTree.Enums.ObjectTypeCommit' -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofCommit commit = liftIO $ do
    commit' <- unsafeManagedPtrGetPtr commit
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_commit commit'
        touchManagedPtr commit
        return ()
     ) (do
        return ()
     )


-- function ostree_validate_structureof_checksum_string
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an ASCII string", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_structureof_checksum_string" ostree_validate_structureof_checksum_string ::
    CString ->                              -- checksum : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./
-}
validateStructureofChecksumString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: an ASCII string -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateStructureofChecksumString checksum = liftIO $ do
    checksum' <- textToCString checksum
    onException (do
        _ <- propagateGError $ ostree_validate_structureof_checksum_string checksum'
        freeMem checksum'
        return ()
     ) (do
        freeMem checksum'
     )


-- function ostree_validate_rev
-- Args : [Arg {argCName = "rev", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A revision string", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_rev" ostree_validate_rev ::
    CString ->                              -- rev : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./
-}
validateRev ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@rev@/: A revision string -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateRev rev = liftIO $ do
    rev' <- textToCString rev
    onException (do
        _ <- propagateGError $ ostree_validate_rev rev'
        freeMem rev'
        return ()
     ) (do
        freeMem rev'
     )


-- function ostree_validate_remote_name
-- Args : [Arg {argCName = "remote_name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A remote name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_remote_name" ostree_validate_remote_name ::
    CString ->                              -- remote_name : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
/No description available in the introspection data./

/Since: 2017.8/
-}
validateRemoteName ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@remoteName@/: A remote name -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateRemoteName remoteName = liftIO $ do
    remoteName' <- textToCString remoteName
    onException (do
        _ <- propagateGError $ ostree_validate_remote_name remoteName'
        freeMem remoteName'
        return ()
     ) (do
        freeMem remoteName'
     )


-- function ostree_validate_collection_id
-- Args : [Arg {argCName = "collection_id", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A collection ID", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_collection_id" ostree_validate_collection_id ::
    CString ->                              -- collection_id : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Check whether the given /@collectionId@/ is valid. Return an error if it is
invalid or 'Nothing'.

Valid collection IDs are reverse DNS names:
 * They are composed of 1 or more elements separated by a period (@.@) character.
   All elements must contain at least one character.
 * Each element must only contain the ASCII characters @[A-Z][a-z][0-9]_@ and must not
   begin with a digit.
 * They must contain at least one @.@ (period) character (and thus at least two elements).
 * They must not begin with a @.@ (period) character.
 * They must not exceed 255 characters in length.

(This makes their format identical to D-Bus interface names, for consistency.)

/Since: 2018.6/
-}
validateCollectionId ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Maybe (T.Text)
    {- ^ /@collectionId@/: A collection ID -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateCollectionId collectionId = liftIO $ do
    maybeCollectionId <- case collectionId of
        Nothing -> return nullPtr
        Just jCollectionId -> do
            jCollectionId' <- textToCString jCollectionId
            return jCollectionId'
    onException (do
        _ <- propagateGError $ ostree_validate_collection_id maybeCollectionId
        freeMem maybeCollectionId
        return ()
     ) (do
        freeMem maybeCollectionId
     )


-- function ostree_validate_checksum_string
-- Args : [Arg {argCName = "sha256", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "SHA256 hex string", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_validate_checksum_string" ostree_validate_checksum_string ::
    CString ->                              -- sha256 : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Use this function to see if input strings are checksums.
-}
validateChecksumString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@sha256@/: SHA256 hex string -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
validateChecksumString sha256 = liftIO $ do
    sha256' <- textToCString sha256
    onException (do
        _ <- propagateGError $ ostree_validate_checksum_string sha256'
        freeMem sha256'
        return ()
     ) (do
        freeMem sha256'
     )


-- function ostree_raw_file_to_content_stream
-- Args : [Arg {argCName = "input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File raw content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A file info", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xattrs", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Serialized object stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_length", argType = TBasicType TUInt64, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Length of stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_raw_file_to_content_stream" ostree_raw_file_to_content_stream ::
    Ptr Gio.InputStream.InputStream ->      -- input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Gio.FileInfo.FileInfo ->            -- file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr GVariant ->                         -- xattrs : TVariant
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Word64 ->                           -- out_length : TBasicType TUInt64
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Convert from a \"bare\" file representation into an
OSTREE_OBJECT_TYPE_FILE stream.  This is a fundamental operation
for writing data to an 'GI.OSTree.Objects.Repo.Repo'.
-}
rawFileToContentStream ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.InputStream.IsInputStream a, Gio.FileInfo.IsFileInfo b, Gio.Cancellable.IsCancellable c) =>
    a
    {- ^ /@input@/: File raw content stream -}
    -> b
    {- ^ /@fileInfo@/: A file info -}
    -> Maybe (GVariant)
    {- ^ /@xattrs@/: Optional extended attributes -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ((Gio.InputStream.InputStream, Word64))
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
rawFileToContentStream input fileInfo xattrs cancellable = liftIO $ do
    input' <- unsafeManagedPtrCastPtr input
    fileInfo' <- unsafeManagedPtrCastPtr fileInfo
    maybeXattrs <- case xattrs of
        Nothing -> return nullPtr
        Just jXattrs -> do
            jXattrs' <- unsafeManagedPtrGetPtr jXattrs
            return jXattrs'
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    outLength <- allocMem :: IO (Ptr Word64)
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_raw_file_to_content_stream input' fileInfo' maybeXattrs outInput outLength maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        outLength' <- peek outLength
        touchManagedPtr input
        touchManagedPtr fileInfo
        whenJust xattrs touchManagedPtr
        whenJust cancellable touchManagedPtr
        freeMem outInput
        freeMem outLength
        return (outInput'', outLength')
     ) (do
        freeMem outInput
        freeMem outLength
     )


-- function ostree_raw_file_to_archive_z2_stream_with_options
-- Args : [Arg {argCName = "input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File raw content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A file info", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xattrs", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "options", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A GVariant `a{sv}` with an extensible set of flags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Serialized object stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_raw_file_to_archive_z2_stream_with_options" ostree_raw_file_to_archive_z2_stream_with_options ::
    Ptr Gio.InputStream.InputStream ->      -- input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Gio.FileInfo.FileInfo ->            -- file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr GVariant ->                         -- xattrs : TVariant
    Ptr GVariant ->                         -- options : TVariant
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Like 'GI.OSTree.Functions.rawFileToArchiveZ2Stream', but supports an extensible set
of flags. The following flags are currently defined:

* @compression-level@ (@i@): Level of compression to use, 0–9, with 0 being
the least compression, and \<0 giving the default level (currently 6).


/Since: 2017.3/
-}
rawFileToArchiveZ2StreamWithOptions ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.InputStream.IsInputStream a, Gio.FileInfo.IsFileInfo b, Gio.Cancellable.IsCancellable c) =>
    a
    {- ^ /@input@/: File raw content stream -}
    -> b
    {- ^ /@fileInfo@/: A file info -}
    -> Maybe (GVariant)
    {- ^ /@xattrs@/: Optional extended attributes -}
    -> Maybe (GVariant)
    {- ^ /@options@/: A GVariant @a{sv}@ with an extensible set of flags -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m (Gio.InputStream.InputStream)
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
rawFileToArchiveZ2StreamWithOptions input fileInfo xattrs options cancellable = liftIO $ do
    input' <- unsafeManagedPtrCastPtr input
    fileInfo' <- unsafeManagedPtrCastPtr fileInfo
    maybeXattrs <- case xattrs of
        Nothing -> return nullPtr
        Just jXattrs -> do
            jXattrs' <- unsafeManagedPtrGetPtr jXattrs
            return jXattrs'
    maybeOptions <- case options of
        Nothing -> return nullPtr
        Just jOptions -> do
            jOptions' <- unsafeManagedPtrGetPtr jOptions
            return jOptions'
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_raw_file_to_archive_z2_stream_with_options input' fileInfo' maybeXattrs maybeOptions outInput maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        touchManagedPtr input
        touchManagedPtr fileInfo
        whenJust xattrs touchManagedPtr
        whenJust options touchManagedPtr
        whenJust cancellable touchManagedPtr
        freeMem outInput
        return outInput''
     ) (do
        freeMem outInput
     )


-- function ostree_raw_file_to_archive_z2_stream
-- Args : [Arg {argCName = "input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File raw content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A file info", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xattrs", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Serialized object stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_raw_file_to_archive_z2_stream" ostree_raw_file_to_archive_z2_stream ::
    Ptr Gio.InputStream.InputStream ->      -- input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Gio.FileInfo.FileInfo ->            -- file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr GVariant ->                         -- xattrs : TVariant
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Convert from a \"bare\" file representation into an
OSTREE_OBJECT_TYPE_FILE stream suitable for ostree pull.
-}
rawFileToArchiveZ2Stream ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.InputStream.IsInputStream a, Gio.FileInfo.IsFileInfo b, Gio.Cancellable.IsCancellable c) =>
    a
    {- ^ /@input@/: File raw content stream -}
    -> b
    {- ^ /@fileInfo@/: A file info -}
    -> Maybe (GVariant)
    {- ^ /@xattrs@/: Optional extended attributes -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m (Gio.InputStream.InputStream)
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
rawFileToArchiveZ2Stream input fileInfo xattrs cancellable = liftIO $ do
    input' <- unsafeManagedPtrCastPtr input
    fileInfo' <- unsafeManagedPtrCastPtr fileInfo
    maybeXattrs <- case xattrs of
        Nothing -> return nullPtr
        Just jXattrs -> do
            jXattrs' <- unsafeManagedPtrGetPtr jXattrs
            return jXattrs'
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_raw_file_to_archive_z2_stream input' fileInfo' maybeXattrs outInput maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        touchManagedPtr input
        touchManagedPtr fileInfo
        whenJust xattrs touchManagedPtr
        whenJust cancellable touchManagedPtr
        freeMem outInput
        return outInput''
     ) (do
        freeMem outInput
     )


-- function ostree_parse_refspec
-- Args : [Arg {argCName = "refspec", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A \"refspec\" string", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_remote", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Return location for the remote name,\n   or %NULL if the refspec refs to a local ref", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_ref", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Return location for the ref name", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_parse_refspec" ostree_parse_refspec ::
    CString ->                              -- refspec : TBasicType TUTF8
    Ptr CString ->                          -- out_remote : TBasicType TUTF8
    Ptr CString ->                          -- out_ref : TBasicType TUTF8
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Split a refspec like @gnome-ostree:gnome-ostree\/buildmaster@ or just
@gnome-ostree\/buildmaster@ into two parts. In the first case, /@outRemote@/
will be set to @gnome-ostree@, and /@outRef@/ to @gnome-ostree\/buildmaster@.
In the second case (a local ref), /@outRemote@/ will be 'Nothing', and /@outRef@/
will be @gnome-ostree\/buildmaster@. In both cases, 'True' will be returned.
-}
parseRefspec ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@refspec@/: A \"refspec\" string -}
    -> m ((Maybe T.Text, T.Text))
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
parseRefspec refspec = liftIO $ do
    refspec' <- textToCString refspec
    outRemote <- allocMem :: IO (Ptr CString)
    outRef <- allocMem :: IO (Ptr CString)
    onException (do
        _ <- propagateGError $ ostree_parse_refspec refspec' outRemote outRef
        outRemote' <- peek outRemote
        maybeOutRemote' <- convertIfNonNull outRemote' $ \outRemote'' -> do
            outRemote''' <- cstringToText outRemote''
            return outRemote'''
        freeMem outRemote'
        outRef' <- peek outRef
        outRef'' <- cstringToText outRef'
        freeMem outRef'
        freeMem refspec'
        freeMem outRemote
        freeMem outRef
        return (maybeOutRemote', outRef'')
     ) (do
        freeMem refspec'
        freeMem outRemote
        freeMem outRef
     )


-- function ostree_object_type_to_string
-- Args : [Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "an #OstreeObjectType", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_type_to_string" ostree_object_type_to_string ::
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO CString

{- |
Serialize /@objtype@/ to a string; this is used for file extensions.
-}
objectTypeToString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    OSTree.Enums.ObjectType
    {- ^ /@objtype@/: an 'GI.OSTree.Enums.ObjectType' -}
    -> m T.Text
objectTypeToString objtype = liftIO $ do
    let objtype' = (fromIntegral . fromEnum) objtype
    result <- ostree_object_type_to_string objtype'
    checkUnexpectedReturnNULL "objectTypeToString" result
    result' <- cstringToText result
    return result'


-- function ostree_object_type_from_string
-- Args : [Arg {argCName = "str", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A stringified version of #OstreeObjectType", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "OSTree", name = "ObjectType"}))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_type_from_string" ostree_object_type_from_string ::
    CString ->                              -- str : TBasicType TUTF8
    IO CUInt

{- |
The reverse of 'GI.OSTree.Functions.objectTypeToString'.
-}
objectTypeFromString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@str@/: A stringified version of 'GI.OSTree.Enums.ObjectType' -}
    -> m OSTree.Enums.ObjectType
objectTypeFromString str = liftIO $ do
    str' <- textToCString str
    result <- ostree_object_type_from_string str'
    let result' = (toEnum . fromIntegral) result
    freeMem str'
    return result'


-- function ostree_object_to_string
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_to_string" ostree_object_to_string ::
    CString ->                              -- checksum : TBasicType TUTF8
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO CString

{- |
/No description available in the introspection data./
-}
objectToString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: An ASCII checksum -}
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: Object type -}
    -> m T.Text
    {- ^ __Returns:__ A string containing both /@checksum@/ and a stringifed version of /@objtype@/ -}
objectToString checksum objtype = liftIO $ do
    checksum' <- textToCString checksum
    let objtype' = (fromIntegral . fromEnum) objtype
    result <- ostree_object_to_string checksum' objtype'
    checkUnexpectedReturnNULL "objectToString" result
    result' <- cstringToText result
    freeMem result
    freeMem checksum'
    return result'


-- function ostree_object_name_serialize
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just TVariant
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_name_serialize" ostree_object_name_serialize ::
    CString ->                              -- checksum : TBasicType TUTF8
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO (Ptr GVariant)

{- |
/No description available in the introspection data./
-}
objectNameSerialize ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: An ASCII checksum -}
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: An object type -}
    -> m GVariant
    {- ^ __Returns:__ A new floating 'GVariant' containing checksum string and objtype -}
objectNameSerialize checksum objtype = liftIO $ do
    checksum' <- textToCString checksum
    let objtype' = (fromIntegral . fromEnum) objtype
    result <- ostree_object_name_serialize checksum' objtype'
    checkUnexpectedReturnNULL "objectNameSerialize" result
    result' <- B.GVariant.newGVariantFromPtr result
    freeMem checksum'
    return result'


-- function ostree_object_name_deserialize
-- Args : [Arg {argCName = "variant", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A #GVariant of type (su)", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_checksum", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Pointer into string memory of @variant with checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Return object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_name_deserialize" ostree_object_name_deserialize ::
    Ptr GVariant ->                         -- variant : TVariant
    Ptr CString ->                          -- out_checksum : TBasicType TUTF8
    Ptr CUInt ->                            -- out_objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO ()

{- |
Reverse 'GI.OSTree.Functions.objectNameSerialize'.  Note that /@outChecksum@/ is
only valid for the lifetime of /@variant@/, and must not be freed.
-}
objectNameDeserialize ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@variant@/: A 'GVariant' of type (su) -}
    -> m ((T.Text, OSTree.Enums.ObjectType))
objectNameDeserialize variant = liftIO $ do
    variant' <- unsafeManagedPtrGetPtr variant
    outChecksum <- allocMem :: IO (Ptr CString)
    outObjtype <- allocMem :: IO (Ptr CUInt)
    ostree_object_name_deserialize variant' outChecksum outObjtype
    outChecksum' <- peek outChecksum
    outChecksum'' <- cstringToText outChecksum'
    outObjtype' <- peek outObjtype
    let outObjtype'' = (toEnum . fromIntegral) outObjtype'
    touchManagedPtr variant
    freeMem outChecksum
    freeMem outObjtype
    return (outChecksum'', outObjtype'')


-- function ostree_object_from_string
-- Args : [Arg {argCName = "str", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_checksum", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Parsed checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Parsed object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_object_from_string" ostree_object_from_string ::
    CString ->                              -- str : TBasicType TUTF8
    Ptr CString ->                          -- out_checksum : TBasicType TUTF8
    Ptr CUInt ->                            -- out_objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO ()

{- |
Reverse 'GI.OSTree.Functions.objectToString'.
-}
objectFromString ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@str@/: An ASCII checksum -}
    -> m ((T.Text, OSTree.Enums.ObjectType))
objectFromString str = liftIO $ do
    str' <- textToCString str
    outChecksum <- allocMem :: IO (Ptr CString)
    outObjtype <- allocMem :: IO (Ptr CUInt)
    ostree_object_from_string str' outChecksum outObjtype
    outChecksum' <- peek outChecksum
    outChecksum'' <- cstringToText outChecksum'
    freeMem outChecksum'
    outObjtype' <- peek outObjtype
    let outObjtype'' = (toEnum . fromIntegral) outObjtype'
    freeMem str'
    freeMem outChecksum
    freeMem outObjtype
    return (outChecksum'', outObjtype'')


-- function ostree_metadata_variant_type
-- Args : [Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "GLib", name = "VariantType"}))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_metadata_variant_type" ostree_metadata_variant_type ::
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    IO (Ptr GLib.VariantType.VariantType)

{- |
/No description available in the introspection data./
-}
metadataVariantType ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    OSTree.Enums.ObjectType
    -> m GLib.VariantType.VariantType
metadataVariantType objtype = liftIO $ do
    let objtype' = (fromIntegral . fromEnum) objtype
    result <- ostree_metadata_variant_type objtype'
    checkUnexpectedReturnNULL "metadataVariantType" result
    result' <- (newBoxed GLib.VariantType.VariantType) result
    return result'


-- function ostree_hash_object_name
-- Args : [Arg {argCName = "a", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "A #GVariant containing a serialized object", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_hash_object_name" ostree_hash_object_name ::
    Ptr () ->                               -- a : TBasicType TPtr
    IO Word32

{- |
Use this function with 'GI.GLib.Structs.HashTable.HashTable' and 'GI.OSTree.Functions.objectNameSerialize'.
-}
hashObjectName ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Ptr ()
    {- ^ /@a@/: A 'GVariant' containing a serialized object -}
    -> m Word32
hashObjectName a = liftIO $ do
    result <- ostree_hash_object_name a
    return result


-- function ostree_gpg_error_quark
-- Args : []
-- Lengths : []
-- returnType : Just (TBasicType TUInt32)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_gpg_error_quark" ostree_gpg_error_quark ::
    IO Word32

{- |
/No description available in the introspection data./
-}
gpgErrorQuark ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m Word32
gpgErrorQuark  = liftIO $ do
    result <- ostree_gpg_error_quark
    return result


-- function ostree_diff_print
-- Args : [Arg {argCName = "a", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "b", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "modified", argType = TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Modified files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "removed", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Removed files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "added", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Added files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_diff_print" ostree_diff_print ::
    Ptr Gio.File.File ->                    -- a : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr Gio.File.File ->                    -- b : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr (GPtrArray (Ptr OSTree.DiffItem.DiffItem)) -> -- modified : TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- removed : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- added : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    IO ()

{- |
Print the contents of a diff to stdout.
-}
diffPrint ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.File.IsFile b) =>
    a
    {- ^ /@a@/: First directory path -}
    -> b
    {- ^ /@b@/: First directory path -}
    -> [OSTree.DiffItem.DiffItem]
    {- ^ /@modified@/: Modified files -}
    -> [Gio.File.File]
    {- ^ /@removed@/: Removed files -}
    -> [Gio.File.File]
    {- ^ /@added@/: Added files -}
    -> m ()
diffPrint a b modified removed added = liftIO $ do
    a' <- unsafeManagedPtrCastPtr a
    b' <- unsafeManagedPtrCastPtr b
    modified' <- mapM unsafeManagedPtrGetPtr modified
    modified'' <- packGPtrArray modified'
    removed' <- mapM unsafeManagedPtrCastPtr removed
    removed'' <- packGPtrArray removed'
    added' <- mapM unsafeManagedPtrCastPtr added
    added'' <- packGPtrArray added'
    ostree_diff_print a' b' modified'' removed'' added''
    touchManagedPtr a
    touchManagedPtr b
    mapM_ touchManagedPtr modified
    mapM_ touchManagedPtr removed
    mapM_ touchManagedPtr added
    unrefPtrArray modified''
    unrefPtrArray removed''
    unrefPtrArray added''
    return ()


-- function ostree_diff_dirs_with_options
-- Args : [Arg {argCName = "flags", argType = TInterface (Name {namespace = "OSTree", name = "DiffFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Flags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "a", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "b", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "modified", argType = TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Modified files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "removed", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Removed files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "added", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Added files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "options", argType = TInterface (Name {namespace = "OSTree", name = "DiffDirsOptions"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Options", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_diff_dirs_with_options" ostree_diff_dirs_with_options ::
    CUInt ->                                -- flags : TInterface (Name {namespace = "OSTree", name = "DiffFlags"})
    Ptr Gio.File.File ->                    -- a : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr Gio.File.File ->                    -- b : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr (GPtrArray (Ptr OSTree.DiffItem.DiffItem)) -> -- modified : TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- removed : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- added : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    Ptr OSTree.DiffDirsOptions.DiffDirsOptions -> -- options : TInterface (Name {namespace = "OSTree", name = "DiffDirsOptions"})
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Compute the difference between directory /@a@/ and /@b@/ as 3 separate
sets of 'GI.OSTree.Structs.DiffItem.DiffItem' in /@modified@/, /@removed@/, and /@added@/.
-}
diffDirsWithOptions ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.File.IsFile b, Gio.Cancellable.IsCancellable c) =>
    [OSTree.Flags.DiffFlags]
    {- ^ /@flags@/: Flags -}
    -> a
    {- ^ /@a@/: First directory path, or 'Nothing' -}
    -> b
    {- ^ /@b@/: First directory path -}
    -> [OSTree.DiffItem.DiffItem]
    {- ^ /@modified@/: Modified files -}
    -> [Gio.File.File]
    {- ^ /@removed@/: Removed files -}
    -> [Gio.File.File]
    {- ^ /@added@/: Added files -}
    -> Maybe (OSTree.DiffDirsOptions.DiffDirsOptions)
    {- ^ /@options@/: Options -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
diffDirsWithOptions flags a b modified removed added options cancellable = liftIO $ do
    let flags' = gflagsToWord flags
    a' <- unsafeManagedPtrCastPtr a
    b' <- unsafeManagedPtrCastPtr b
    modified' <- mapM unsafeManagedPtrGetPtr modified
    modified'' <- packGPtrArray modified'
    removed' <- mapM unsafeManagedPtrCastPtr removed
    removed'' <- packGPtrArray removed'
    added' <- mapM unsafeManagedPtrCastPtr added
    added'' <- packGPtrArray added'
    maybeOptions <- case options of
        Nothing -> return nullPtr
        Just jOptions -> do
            jOptions' <- unsafeManagedPtrGetPtr jOptions
            return jOptions'
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_diff_dirs_with_options flags' a' b' modified'' removed'' added'' maybeOptions maybeCancellable
        touchManagedPtr a
        touchManagedPtr b
        mapM_ touchManagedPtr modified
        mapM_ touchManagedPtr removed
        mapM_ touchManagedPtr added
        whenJust options touchManagedPtr
        whenJust cancellable touchManagedPtr
        unrefPtrArray modified''
        unrefPtrArray removed''
        unrefPtrArray added''
        return ()
     ) (do
        unrefPtrArray modified''
        unrefPtrArray removed''
        unrefPtrArray added''
     )


-- function ostree_diff_dirs
-- Args : [Arg {argCName = "flags", argType = TInterface (Name {namespace = "OSTree", name = "DiffFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Flags", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "a", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path, or %NULL", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "b", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "First directory path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "modified", argType = TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Modified files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "removed", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Removed files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "added", argType = TPtrArray (TInterface (Name {namespace = "Gio", name = "File"})), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Added files", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_diff_dirs" ostree_diff_dirs ::
    CUInt ->                                -- flags : TInterface (Name {namespace = "OSTree", name = "DiffFlags"})
    Ptr Gio.File.File ->                    -- a : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr Gio.File.File ->                    -- b : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr (GPtrArray (Ptr OSTree.DiffItem.DiffItem)) -> -- modified : TPtrArray (TInterface (Name {namespace = "OSTree", name = "DiffItem"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- removed : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    Ptr (GPtrArray (Ptr Gio.File.File)) ->  -- added : TPtrArray (TInterface (Name {namespace = "Gio", name = "File"}))
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Compute the difference between directory /@a@/ and /@b@/ as 3 separate
sets of 'GI.OSTree.Structs.DiffItem.DiffItem' in /@modified@/, /@removed@/, and /@added@/.
-}
diffDirs ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.File.IsFile b, Gio.Cancellable.IsCancellable c) =>
    [OSTree.Flags.DiffFlags]
    {- ^ /@flags@/: Flags -}
    -> a
    {- ^ /@a@/: First directory path, or 'Nothing' -}
    -> b
    {- ^ /@b@/: First directory path -}
    -> [OSTree.DiffItem.DiffItem]
    {- ^ /@modified@/: Modified files -}
    -> [Gio.File.File]
    {- ^ /@removed@/: Removed files -}
    -> [Gio.File.File]
    {- ^ /@added@/: Added files -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
diffDirs flags a b modified removed added cancellable = liftIO $ do
    let flags' = gflagsToWord flags
    a' <- unsafeManagedPtrCastPtr a
    b' <- unsafeManagedPtrCastPtr b
    modified' <- mapM unsafeManagedPtrGetPtr modified
    modified'' <- packGPtrArray modified'
    removed' <- mapM unsafeManagedPtrCastPtr removed
    removed'' <- packGPtrArray removed'
    added' <- mapM unsafeManagedPtrCastPtr added
    added'' <- packGPtrArray added'
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_diff_dirs flags' a' b' modified'' removed'' added'' maybeCancellable
        touchManagedPtr a
        touchManagedPtr b
        mapM_ touchManagedPtr modified
        mapM_ touchManagedPtr removed
        mapM_ touchManagedPtr added
        whenJust cancellable touchManagedPtr
        unrefPtrArray modified''
        unrefPtrArray removed''
        unrefPtrArray added''
        return ()
     ) (do
        unrefPtrArray modified''
        unrefPtrArray removed''
        unrefPtrArray added''
     )


-- function ostree_create_directory_metadata
-- Args : [Arg {argCName = "dir_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GFileInfo containing directory information", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xattrs", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just TVariant
-- throws : False
-- Skip return : False

foreign import ccall "ostree_create_directory_metadata" ostree_create_directory_metadata ::
    Ptr Gio.FileInfo.FileInfo ->            -- dir_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr GVariant ->                         -- xattrs : TVariant
    IO (Ptr GVariant)

{- |
/No description available in the introspection data./
-}
createDirectoryMetadata ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.FileInfo.IsFileInfo a) =>
    a
    {- ^ /@dirInfo@/: a 'GI.Gio.Objects.FileInfo.FileInfo' containing directory information -}
    -> Maybe (GVariant)
    {- ^ /@xattrs@/: Optional extended attributes -}
    -> m GVariant
    {- ^ __Returns:__ A new 'GVariant' containing 'GI.OSTree.Enums.ObjectTypeDirMeta' -}
createDirectoryMetadata dirInfo xattrs = liftIO $ do
    dirInfo' <- unsafeManagedPtrCastPtr dirInfo
    maybeXattrs <- case xattrs of
        Nothing -> return nullPtr
        Just jXattrs -> do
            jXattrs' <- unsafeManagedPtrGetPtr jXattrs
            return jXattrs'
    result <- ostree_create_directory_metadata dirInfo' maybeXattrs
    checkUnexpectedReturnNULL "createDirectoryMetadata" result
    result' <- B.GVariant.wrapGVariantPtr result
    touchManagedPtr dirInfo
    whenJust xattrs touchManagedPtr
    return result'


-- function ostree_content_stream_parse
-- Args : [Arg {argCName = "compressed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Whether or not the stream is zlib-compressed", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "input_length", argType = TBasicType TUInt64, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Length of stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "trusted", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "If %TRUE, assume the content has been validated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The raw file content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Normal metadata", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_xattrs", argType = TVariant, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_content_stream_parse" ostree_content_stream_parse ::
    CInt ->                                 -- compressed : TBasicType TBoolean
    Ptr Gio.InputStream.InputStream ->      -- input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Word64 ->                               -- input_length : TBasicType TUInt64
    CInt ->                                 -- trusted : TBasicType TBoolean
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr (Ptr Gio.FileInfo.FileInfo) ->      -- out_file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr (Ptr GVariant) ->                   -- out_xattrs : TVariant
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
The reverse of 'GI.OSTree.Functions.rawFileToContentStream'; this function
converts an object content stream back into components.
-}
contentStreamParse ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.InputStream.IsInputStream a, Gio.Cancellable.IsCancellable b) =>
    Bool
    {- ^ /@compressed@/: Whether or not the stream is zlib-compressed -}
    -> a
    {- ^ /@input@/: Object content stream -}
    -> Word64
    {- ^ /@inputLength@/: Length of stream -}
    -> Bool
    {- ^ /@trusted@/: If 'True', assume the content has been validated -}
    -> Maybe (b)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ((Gio.InputStream.InputStream, Gio.FileInfo.FileInfo, GVariant))
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
contentStreamParse compressed input inputLength trusted cancellable = liftIO $ do
    let compressed' = (fromIntegral . fromEnum) compressed
    input' <- unsafeManagedPtrCastPtr input
    let trusted' = (fromIntegral . fromEnum) trusted
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    outFileInfo <- allocMem :: IO (Ptr (Ptr Gio.FileInfo.FileInfo))
    outXattrs <- allocMem :: IO (Ptr (Ptr GVariant))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_content_stream_parse compressed' input' inputLength trusted' outInput outFileInfo outXattrs maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        outFileInfo' <- peek outFileInfo
        outFileInfo'' <- (wrapObject Gio.FileInfo.FileInfo) outFileInfo'
        outXattrs' <- peek outXattrs
        outXattrs'' <- B.GVariant.wrapGVariantPtr outXattrs'
        touchManagedPtr input
        whenJust cancellable touchManagedPtr
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
        return (outInput'', outFileInfo'', outXattrs'')
     ) (do
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
     )


-- function ostree_content_file_parse_at
-- Args : [Arg {argCName = "compressed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Whether or not the stream is zlib-compressed", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "parent_dfd", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Directory file descriptor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Subpath", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "trusted", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "If %TRUE, assume the content has been validated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The raw file content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Normal metadata", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_xattrs", argType = TVariant, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_content_file_parse_at" ostree_content_file_parse_at ::
    CInt ->                                 -- compressed : TBasicType TBoolean
    Int32 ->                                -- parent_dfd : TBasicType TInt
    CString ->                              -- path : TBasicType TUTF8
    CInt ->                                 -- trusted : TBasicType TBoolean
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr (Ptr Gio.FileInfo.FileInfo) ->      -- out_file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr (Ptr GVariant) ->                   -- out_xattrs : TVariant
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
A thin wrapper for 'GI.OSTree.Functions.contentStreamParse'; this function
converts an object content stream back into components.
-}
contentFileParseAt ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.Cancellable.IsCancellable a) =>
    Bool
    {- ^ /@compressed@/: Whether or not the stream is zlib-compressed -}
    -> Int32
    {- ^ /@parentDfd@/: Directory file descriptor -}
    -> T.Text
    {- ^ /@path@/: Subpath -}
    -> Bool
    {- ^ /@trusted@/: If 'True', assume the content has been validated -}
    -> Maybe (a)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ((Gio.InputStream.InputStream, Gio.FileInfo.FileInfo, GVariant))
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
contentFileParseAt compressed parentDfd path trusted cancellable = liftIO $ do
    let compressed' = (fromIntegral . fromEnum) compressed
    path' <- textToCString path
    let trusted' = (fromIntegral . fromEnum) trusted
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    outFileInfo <- allocMem :: IO (Ptr (Ptr Gio.FileInfo.FileInfo))
    outXattrs <- allocMem :: IO (Ptr (Ptr GVariant))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_content_file_parse_at compressed' parentDfd path' trusted' outInput outFileInfo outXattrs maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        outFileInfo' <- peek outFileInfo
        outFileInfo'' <- (wrapObject Gio.FileInfo.FileInfo) outFileInfo'
        outXattrs' <- peek outXattrs
        outXattrs'' <- B.GVariant.wrapGVariantPtr outXattrs'
        whenJust cancellable touchManagedPtr
        freeMem path'
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
        return (outInput'', outFileInfo'', outXattrs'')
     ) (do
        freeMem path'
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
     )


-- function ostree_content_file_parse
-- Args : [Arg {argCName = "compressed", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Whether or not the stream is zlib-compressed", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "content_path", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Path to file containing content", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "trusted", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "If %TRUE, assume the content has been validated", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_input", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "The raw file content stream", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Normal metadata", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "out_xattrs", argType = TVariant, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_content_file_parse" ostree_content_file_parse ::
    CInt ->                                 -- compressed : TBasicType TBoolean
    Ptr Gio.File.File ->                    -- content_path : TInterface (Name {namespace = "Gio", name = "File"})
    CInt ->                                 -- trusted : TBasicType TBoolean
    Ptr (Ptr Gio.InputStream.InputStream) -> -- out_input : TInterface (Name {namespace = "Gio", name = "InputStream"})
    Ptr (Ptr Gio.FileInfo.FileInfo) ->      -- out_file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr (Ptr GVariant) ->                   -- out_xattrs : TVariant
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
A thin wrapper for 'GI.OSTree.Functions.contentStreamParse'; this function
converts an object content stream back into components.
-}
contentFileParse ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.Cancellable.IsCancellable b) =>
    Bool
    {- ^ /@compressed@/: Whether or not the stream is zlib-compressed -}
    -> a
    {- ^ /@contentPath@/: Path to file containing content -}
    -> Bool
    {- ^ /@trusted@/: If 'True', assume the content has been validated -}
    -> Maybe (b)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ((Gio.InputStream.InputStream, Gio.FileInfo.FileInfo, GVariant))
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
contentFileParse compressed contentPath trusted cancellable = liftIO $ do
    let compressed' = (fromIntegral . fromEnum) compressed
    contentPath' <- unsafeManagedPtrCastPtr contentPath
    let trusted' = (fromIntegral . fromEnum) trusted
    outInput <- allocMem :: IO (Ptr (Ptr Gio.InputStream.InputStream))
    outFileInfo <- allocMem :: IO (Ptr (Ptr Gio.FileInfo.FileInfo))
    outXattrs <- allocMem :: IO (Ptr (Ptr GVariant))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_content_file_parse compressed' contentPath' trusted' outInput outFileInfo outXattrs maybeCancellable
        outInput' <- peek outInput
        outInput'' <- (wrapObject Gio.InputStream.InputStream) outInput'
        outFileInfo' <- peek outFileInfo
        outFileInfo'' <- (wrapObject Gio.FileInfo.FileInfo) outFileInfo'
        outXattrs' <- peek outXattrs
        outXattrs'' <- B.GVariant.wrapGVariantPtr outXattrs'
        touchManagedPtr contentPath
        whenJust cancellable touchManagedPtr
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
        return (outInput'', outFileInfo'', outXattrs'')
     ) (do
        freeMem outInput
        freeMem outFileInfo
        freeMem outXattrs
     )


-- function ostree_commit_get_timestamp
-- Args : [Arg {argCName = "commit_variant", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUInt64)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_commit_get_timestamp" ostree_commit_get_timestamp ::
    Ptr GVariant ->                         -- commit_variant : TVariant
    IO Word64

{- |
/No description available in the introspection data./
-}
commitGetTimestamp ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    -> m Word64
commitGetTimestamp commitVariant = liftIO $ do
    commitVariant' <- unsafeManagedPtrGetPtr commitVariant
    result <- ostree_commit_get_timestamp commitVariant'
    touchManagedPtr commitVariant
    return result


-- function ostree_commit_get_parent
-- Args : [Arg {argCName = "commit_variant", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Variant of type %OSTREE_OBJECT_TYPE_COMMIT", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_commit_get_parent" ostree_commit_get_parent ::
    Ptr GVariant ->                         -- commit_variant : TVariant
    IO CString

{- |
/No description available in the introspection data./
-}
commitGetParent ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@commitVariant@/: Variant of type 'GI.OSTree.Enums.ObjectTypeCommit' -}
    -> m T.Text
    {- ^ __Returns:__ Checksum of the parent commit of /@commitVariant@/, or 'Nothing'
if none -}
commitGetParent commitVariant = liftIO $ do
    commitVariant' <- unsafeManagedPtrGetPtr commitVariant
    result <- ostree_commit_get_parent commitVariant'
    checkUnexpectedReturnNULL "commitGetParent" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr commitVariant
    return result'


-- function ostree_commit_get_content_checksum
-- Args : [Arg {argCName = "commit_variant", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A commit object", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_commit_get_content_checksum" ostree_commit_get_content_checksum ::
    Ptr GVariant ->                         -- commit_variant : TVariant
    IO CString

{- |
There are use cases where one wants a checksum just of the content of a
commit. OSTree commits by default capture the current timestamp, and may have
additional metadata, which means that re-committing identical content
often results in a new checksum.

By comparing checksums of content, it\'s possible to easily distinguish
cases where nothing actually changed.

The content checksums is simply defined as @SHA256(root dirtree_checksum || root_dirmeta_checksum)@,
i.e. the SHA-256 of the root \"dirtree\" object\'s checksum concatenated with the
root \"dirmeta\" checksum (both in binary form, not hexadecimal).
-}
commitGetContentChecksum ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@commitVariant@/: A commit object -}
    -> m (Maybe T.Text)
    {- ^ __Returns:__ A SHA-256 hex string, or 'Nothing' if /@commitVariant@/ is not well-formed -}
commitGetContentChecksum commitVariant = liftIO $ do
    commitVariant' <- unsafeManagedPtrGetPtr commitVariant
    result <- ostree_commit_get_content_checksum commitVariant'
    maybeResult <- convertIfNonNull result $ \result' -> do
        result'' <- cstringToText result'
        freeMem result'
        return result''
    touchManagedPtr commitVariant
    return maybeResult


-- function ostree_cmp_checksum_bytes
-- Args : [Arg {argCName = "a", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A binary checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "b", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "A binary checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TInt)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_cmp_checksum_bytes" ostree_cmp_checksum_bytes ::
    Word8 ->                                -- a : TBasicType TUInt8
    Word8 ->                                -- b : TBasicType TUInt8
    IO Int32

{- |
Compare two binary checksums, using @/memcmp()/@.
-}
cmpChecksumBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Word8
    {- ^ /@a@/: A binary checksum -}
    -> Word8
    {- ^ /@b@/: A binary checksum -}
    -> m Int32
cmpChecksumBytes a b = liftIO $ do
    result <- ostree_cmp_checksum_bytes a b
    return result


-- function ostree_cmd__private__
-- Args : []
-- Lengths : []
-- returnType : Just (TInterface (Name {namespace = "OSTree", name = "CmdPrivateVTable"}))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_cmd__private__" ostree_cmd__private__ ::
    IO (Ptr OSTree.CmdPrivateVTable.CmdPrivateVTable)

{- |
/No description available in the introspection data./
-}
cmd_Private__ ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    m OSTree.CmdPrivateVTable.CmdPrivateVTable
cmd_Private__  = liftIO $ do
    result <- ostree_cmd__private__
    checkUnexpectedReturnNULL "cmd_Private__" result
    result' <- (newPtr OSTree.CmdPrivateVTable.CmdPrivateVTable) result
    return result'


-- function ostree_checksum_to_bytes_v
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just TVariant
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_to_bytes_v" ostree_checksum_to_bytes_v ::
    CString ->                              -- checksum : TBasicType TUTF8
    IO (Ptr GVariant)

{- |
/No description available in the introspection data./
-}
checksumToBytesV ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: An ASCII checksum -}
    -> m GVariant
    {- ^ __Returns:__ New 'GVariant' of type ay with length 32 -}
checksumToBytesV checksum = liftIO $ do
    checksum' <- textToCString checksum
    result <- ostree_checksum_to_bytes_v checksum'
    checkUnexpectedReturnNULL "checksumToBytesV" result
    result' <- B.GVariant.wrapGVariantPtr result
    freeMem checksum'
    return result'


-- function ostree_checksum_to_bytes
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TCArray False 32 (-1) (TBasicType TUInt8))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_to_bytes" ostree_checksum_to_bytes ::
    CString ->                              -- checksum : TBasicType TUTF8
    IO (Ptr Word8)

{- |
/No description available in the introspection data./
-}
checksumToBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: An ASCII checksum -}
    -> m ByteString
    {- ^ __Returns:__ Binary checksum from /@checksum@/ of length 32; free with 'GI.GLib.Functions.free'. -}
checksumToBytes checksum = liftIO $ do
    checksum' <- textToCString checksum
    result <- ostree_checksum_to_bytes checksum'
    checkUnexpectedReturnNULL "checksumToBytes" result
    result' <- (unpackByteStringWithLength 32) result
    freeMem result
    freeMem checksum'
    return result'


-- function ostree_checksum_inplace_to_bytes
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a SHA256 string", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "buf", argType = TBasicType TUInt8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Output buffer with at least 32 bytes of space", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_inplace_to_bytes" ostree_checksum_inplace_to_bytes ::
    CString ->                              -- checksum : TBasicType TUTF8
    Word8 ->                                -- buf : TBasicType TUInt8
    IO ()

{- |
Convert /@checksum@/ from a string to binary in-place, without
allocating memory.  Use this function in hot code paths.
-}
checksumInplaceToBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: a SHA256 string -}
    -> Word8
    {- ^ /@buf@/: Output buffer with at least 32 bytes of space -}
    -> m ()
checksumInplaceToBytes checksum buf = liftIO $ do
    checksum' <- textToCString checksum
    ostree_checksum_inplace_to_bytes checksum' buf
    freeMem checksum'
    return ()


-- function ostree_checksum_from_bytes_v
-- Args : [Arg {argCName = "csum_v", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GVariant of type ay", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_from_bytes_v" ostree_checksum_from_bytes_v ::
    Ptr GVariant ->                         -- csum_v : TVariant
    IO CString

{- |
/No description available in the introspection data./
-}
checksumFromBytesV ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@csumV@/: 'GVariant' of type ay -}
    -> m T.Text
    {- ^ __Returns:__ String form of /@csumBytes@/ -}
checksumFromBytesV csumV = liftIO $ do
    csumV' <- unsafeManagedPtrGetPtr csumV
    result <- ostree_checksum_from_bytes_v csumV'
    checkUnexpectedReturnNULL "checksumFromBytesV" result
    result' <- cstringToText result
    freeMem result
    touchManagedPtr csumV
    return result'


-- function ostree_checksum_from_bytes
-- Args : [Arg {argCName = "csum", argType = TCArray False 32 (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An binary checksum of length 32", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_from_bytes" ostree_checksum_from_bytes ::
    Ptr Word8 ->                            -- csum : TCArray False 32 (-1) (TBasicType TUInt8)
    IO CString

{- |
/No description available in the introspection data./
-}
checksumFromBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ByteString
    {- ^ /@csum@/: An binary checksum of length 32 -}
    -> m T.Text
    {- ^ __Returns:__ String form of /@csum@/ -}
checksumFromBytes csum = liftIO $ do
    csum' <- packByteString csum
    result <- ostree_checksum_from_bytes csum'
    checkUnexpectedReturnNULL "checksumFromBytes" result
    result' <- cstringToText result
    freeMem result
    freeMem csum'
    return result'


-- function ostree_checksum_file_from_input
-- Args : [Arg {argCName = "file_info", argType = TInterface (Name {namespace = "Gio", name = "FileInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File information", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "xattrs", argType = TVariant, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Optional extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "in", argType = TInterface (Name {namespace = "Gio", name = "InputStream"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "File content, should be %NULL for symbolic links", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_csum", argType = TCArray False 32 (-1) (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Return location for binary checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_checksum_file_from_input" ostree_checksum_file_from_input ::
    Ptr Gio.FileInfo.FileInfo ->            -- file_info : TInterface (Name {namespace = "Gio", name = "FileInfo"})
    Ptr GVariant ->                         -- xattrs : TVariant
    Ptr Gio.InputStream.InputStream ->      -- in : TInterface (Name {namespace = "Gio", name = "InputStream"})
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    Ptr (Ptr Word8) ->                      -- out_csum : TCArray False 32 (-1) (TBasicType TUInt8)
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Compute the OSTree checksum for a given input.
-}
checksumFileFromInput ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.FileInfo.IsFileInfo a, Gio.InputStream.IsInputStream b, Gio.Cancellable.IsCancellable c) =>
    a
    {- ^ /@fileInfo@/: File information -}
    -> Maybe (GVariant)
    {- ^ /@xattrs@/: Optional extended attributes -}
    -> Maybe (b)
    {- ^ /@in@/: File content, should be 'Nothing' for symbolic links -}
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: Object type -}
    -> Maybe (c)
    {- ^ /@cancellable@/: Cancellable -}
    -> m (ByteString)
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
checksumFileFromInput fileInfo xattrs in_ objtype cancellable = liftIO $ do
    fileInfo' <- unsafeManagedPtrCastPtr fileInfo
    maybeXattrs <- case xattrs of
        Nothing -> return nullPtr
        Just jXattrs -> do
            jXattrs' <- unsafeManagedPtrGetPtr jXattrs
            return jXattrs'
    maybeIn_ <- case in_ of
        Nothing -> return nullPtr
        Just jIn_ -> do
            jIn_' <- unsafeManagedPtrCastPtr jIn_
            return jIn_'
    let objtype' = (fromIntegral . fromEnum) objtype
    outCsum <- allocMem :: IO (Ptr (Ptr Word8))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_checksum_file_from_input fileInfo' maybeXattrs maybeIn_ objtype' outCsum maybeCancellable
        outCsum' <- peek outCsum
        outCsum'' <- (unpackByteStringWithLength 32) outCsum'
        freeMem outCsum'
        touchManagedPtr fileInfo
        whenJust xattrs touchManagedPtr
        whenJust in_ touchManagedPtr
        whenJust cancellable touchManagedPtr
        freeMem outCsum
        return outCsum''
     ) (do
        freeMem outCsum
     )


-- function ostree_checksum_file_at
-- Args : [Arg {argCName = "dfd", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Directory file descriptor", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Subpath\n@stbuf (allow-none): Optional stat buffer", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "stbuf", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "flags", argType = TInterface (Name {namespace = "OSTree", name = "ChecksumFlags"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Flags\n@out_checksum (out) (transfer full): Return location for hex checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_checksum_file_at" ostree_checksum_file_at ::
    Int32 ->                                -- dfd : TBasicType TInt
    CString ->                              -- path : TBasicType TUTF8
    Ptr () ->                               -- stbuf : TBasicType TPtr
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    CUInt ->                                -- flags : TInterface (Name {namespace = "OSTree", name = "ChecksumFlags"})
    CString ->                              -- out_checksum : TBasicType TUTF8
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Compute the OSTree checksum for a given file. This is an fd-relative version
of 'GI.OSTree.Functions.checksumFile' which also takes flags and fills in a caller
allocated buffer.

/Since: 2017.13/
-}
checksumFileAt ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.Cancellable.IsCancellable a) =>
    Int32
    {- ^ /@dfd@/: Directory file descriptor -}
    -> T.Text
    {- ^ /@path@/: Subpath
/@stbuf@/ (allow-none): Optional stat buffer -}
    -> Ptr ()
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: Object type -}
    -> [OSTree.Flags.ChecksumFlags]
    {- ^ /@flags@/: Flags
/@outChecksum@/ (out) (transfer full): Return location for hex checksum -}
    -> T.Text
    -> Maybe (a)
    {- ^ /@cancellable@/: Cancellable -}
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
checksumFileAt dfd path stbuf objtype flags outChecksum cancellable = liftIO $ do
    path' <- textToCString path
    let objtype' = (fromIntegral . fromEnum) objtype
    let flags' = gflagsToWord flags
    outChecksum' <- textToCString outChecksum
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_checksum_file_at dfd path' stbuf objtype' flags' outChecksum' maybeCancellable
        whenJust cancellable touchManagedPtr
        freeMem path'
        freeMem outChecksum'
        return ()
     ) (do
        freeMem path'
        freeMem outChecksum'
     )


-- function ostree_checksum_file_async_finish
-- Args : [Arg {argCName = "f", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "result", argType = TInterface (Name {namespace = "Gio", name = "AsyncResult"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Async result", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_csum", argType = TCArray False 32 (-1) (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Return location for binary checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_checksum_file_async_finish" ostree_checksum_file_async_finish ::
    Ptr Gio.File.File ->                    -- f : TInterface (Name {namespace = "Gio", name = "File"})
    Ptr Gio.AsyncResult.AsyncResult ->      -- result : TInterface (Name {namespace = "Gio", name = "AsyncResult"})
    Ptr (Ptr Word8) ->                      -- out_csum : TCArray False 32 (-1) (TBasicType TUInt8)
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Finish computing the OSTree checksum for a given file; see
'GI.OSTree.Functions.checksumFileAsync'.
-}
checksumFileAsyncFinish ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.AsyncResult.IsAsyncResult b) =>
    a
    {- ^ /@f@/: File path -}
    -> b
    {- ^ /@result@/: Async result -}
    -> m (ByteString)
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
checksumFileAsyncFinish f result_ = liftIO $ do
    f' <- unsafeManagedPtrCastPtr f
    result_' <- unsafeManagedPtrCastPtr result_
    outCsum <- allocMem :: IO (Ptr (Ptr Word8))
    onException (do
        _ <- propagateGError $ ostree_checksum_file_async_finish f' result_' outCsum
        outCsum' <- peek outCsum
        outCsum'' <- (unpackByteStringWithLength 32) outCsum'
        freeMem outCsum'
        touchManagedPtr f
        touchManagedPtr result_
        freeMem outCsum
        return outCsum''
     ) (do
        freeMem outCsum
     )


-- function ostree_checksum_file_async
-- Args : [Arg {argCName = "f", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "io_priority", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Priority for operation, see %G_IO_PRIORITY_DEFAULT", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "callback", argType = TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Invoked when operation is complete", sinceVersion = Nothing}, argScope = ScopeTypeAsync, argClosure = 5, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "user_data", argType = TBasicType TPtr, direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Data for @callback", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Nothing
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_file_async" ostree_checksum_file_async ::
    Ptr Gio.File.File ->                    -- f : TInterface (Name {namespace = "Gio", name = "File"})
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    Int32 ->                                -- io_priority : TBasicType TInt
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    FunPtr Gio.Callbacks.C_AsyncReadyCallback -> -- callback : TInterface (Name {namespace = "Gio", name = "AsyncReadyCallback"})
    Ptr () ->                               -- user_data : TBasicType TPtr
    IO ()

{- |
Asynchronously compute the OSTree checksum for a given file;
complete with 'GI.OSTree.Functions.checksumFileAsyncFinish'.
-}
checksumFileAsync ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.Cancellable.IsCancellable b) =>
    a
    {- ^ /@f@/: File path -}
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: Object type -}
    -> Int32
    {- ^ /@ioPriority@/: Priority for operation, see @/G_IO_PRIORITY_DEFAULT/@ -}
    -> Maybe (b)
    {- ^ /@cancellable@/: Cancellable -}
    -> Maybe (Gio.Callbacks.AsyncReadyCallback)
    {- ^ /@callback@/: Invoked when operation is complete -}
    -> m ()
checksumFileAsync f objtype ioPriority cancellable callback = liftIO $ do
    f' <- unsafeManagedPtrCastPtr f
    let objtype' = (fromIntegral . fromEnum) objtype
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    maybeCallback <- case callback of
        Nothing -> return (castPtrToFunPtr nullPtr)
        Just jCallback -> do
            ptrcallback <- callocMem :: IO (Ptr (FunPtr Gio.Callbacks.C_AsyncReadyCallback))
            jCallback' <- Gio.Callbacks.mk_AsyncReadyCallback (Gio.Callbacks.wrap_AsyncReadyCallback (Just ptrcallback) (Gio.Callbacks.drop_closures_AsyncReadyCallback jCallback))
            poke ptrcallback jCallback'
            return jCallback'
    let userData = nullPtr
    ostree_checksum_file_async f' objtype' ioPriority maybeCancellable maybeCallback userData
    touchManagedPtr f
    whenJust cancellable touchManagedPtr
    return ()


-- function ostree_checksum_file
-- Args : [Arg {argCName = "f", argType = TInterface (Name {namespace = "Gio", name = "File"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "File path", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "objtype", argType = TInterface (Name {namespace = "OSTree", name = "ObjectType"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Object type", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "out_csum", argType = TCArray False 32 (-1) (TBasicType TUInt8), direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Return location for binary checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Just "Cancellable", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_checksum_file" ostree_checksum_file ::
    Ptr Gio.File.File ->                    -- f : TInterface (Name {namespace = "Gio", name = "File"})
    CUInt ->                                -- objtype : TInterface (Name {namespace = "OSTree", name = "ObjectType"})
    Ptr (Ptr Word8) ->                      -- out_csum : TCArray False 32 (-1) (TBasicType TUInt8)
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
Compute the OSTree checksum for a given file.
-}
checksumFile ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.File.IsFile a, Gio.Cancellable.IsCancellable b) =>
    a
    {- ^ /@f@/: File path -}
    -> OSTree.Enums.ObjectType
    {- ^ /@objtype@/: Object type -}
    -> Maybe (b)
    {- ^ /@cancellable@/: Cancellable -}
    -> m (ByteString)
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
checksumFile f objtype cancellable = liftIO $ do
    f' <- unsafeManagedPtrCastPtr f
    let objtype' = (fromIntegral . fromEnum) objtype
    outCsum <- allocMem :: IO (Ptr (Ptr Word8))
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_checksum_file f' objtype' outCsum maybeCancellable
        outCsum' <- peek outCsum
        outCsum'' <- (unpackByteStringWithLength 32) outCsum'
        freeMem outCsum'
        touchManagedPtr f
        whenJust cancellable touchManagedPtr
        freeMem outCsum
        return outCsum''
     ) (do
        freeMem outCsum
     )


-- function ostree_checksum_bytes_peek_validate
-- Args : [Arg {argCName = "bytes", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GVariant of type ay", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TCArray False 32 (-1) (TBasicType TUInt8))
-- throws : True
-- Skip return : False

foreign import ccall "ostree_checksum_bytes_peek_validate" ostree_checksum_bytes_peek_validate ::
    Ptr GVariant ->                         -- bytes : TVariant
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr Word8)

{- |
Like 'GI.OSTree.Functions.checksumBytesPeek', but also throws /@error@/.
-}
checksumBytesPeekValidate ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@bytes@/: 'GVariant' of type ay -}
    -> m ByteString
    {- ^ __Returns:__ Binary checksum data /(Can throw 'Data.GI.Base.GError.GError')/ -}
checksumBytesPeekValidate bytes = liftIO $ do
    bytes' <- unsafeManagedPtrGetPtr bytes
    onException (do
        result <- propagateGError $ ostree_checksum_bytes_peek_validate bytes'
        checkUnexpectedReturnNULL "checksumBytesPeekValidate" result
        result' <- (unpackByteStringWithLength 32) result
        touchManagedPtr bytes
        return result'
     ) (do
        return ()
     )


-- function ostree_checksum_bytes_peek
-- Args : [Arg {argCName = "bytes", argType = TVariant, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "#GVariant of type ay", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TCArray False 32 (-1) (TBasicType TUInt8))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_bytes_peek" ostree_checksum_bytes_peek ::
    Ptr GVariant ->                         -- bytes : TVariant
    IO (Ptr Word8)

{- |
/No description available in the introspection data./
-}
checksumBytesPeek ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    GVariant
    {- ^ /@bytes@/: 'GVariant' of type ay -}
    -> m ByteString
    {- ^ __Returns:__ Binary checksum data in /@bytes@/; do not free.  If /@bytes@/ does not have the correct length, return 'Nothing'. -}
checksumBytesPeek bytes = liftIO $ do
    bytes' <- unsafeManagedPtrGetPtr bytes
    result <- ostree_checksum_bytes_peek bytes'
    checkUnexpectedReturnNULL "checksumBytesPeek" result
    result' <- (unpackByteStringWithLength 32) result
    touchManagedPtr bytes
    return result'


-- function ostree_checksum_b64_to_bytes
-- Args : [Arg {argCName = "checksum", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An ASCII checksum", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TCArray False 32 (-1) (TBasicType TUInt8))
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_b64_to_bytes" ostree_checksum_b64_to_bytes ::
    CString ->                              -- checksum : TBasicType TUTF8
    IO (Ptr Word8)

{- |
/No description available in the introspection data./
-}
checksumB64ToBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    T.Text
    {- ^ /@checksum@/: An ASCII checksum -}
    -> m ByteString
    {- ^ __Returns:__ Binary version of /@checksum@/. -}
checksumB64ToBytes checksum = liftIO $ do
    checksum' <- textToCString checksum
    result <- ostree_checksum_b64_to_bytes checksum'
    checkUnexpectedReturnNULL "checksumB64ToBytes" result
    result' <- (unpackByteStringWithLength 32) result
    freeMem result
    freeMem checksum'
    return result'


-- function ostree_checksum_b64_from_bytes
-- Args : [Arg {argCName = "csum", argType = TCArray False 32 (-1) (TBasicType TUInt8), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "An binary checksum of length 32", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_checksum_b64_from_bytes" ostree_checksum_b64_from_bytes ::
    Ptr Word8 ->                            -- csum : TCArray False 32 (-1) (TBasicType TUInt8)
    IO CString

{- |
/No description available in the introspection data./
-}
checksumB64FromBytes ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    ByteString
    {- ^ /@csum@/: An binary checksum of length 32 -}
    -> m T.Text
    {- ^ __Returns:__ Modified base64 encoding of /@csum@/

The \"modified\" term refers to the fact that instead of \'\/\', the \'_\'
character is used. -}
checksumB64FromBytes csum = liftIO $ do
    csum' <- packByteString csum
    result <- ostree_checksum_b64_from_bytes csum'
    checkUnexpectedReturnNULL "checksumB64FromBytes" result
    result' <- cstringToText result
    freeMem result
    freeMem csum'
    return result'


-- function ostree_check_version
-- Args : [Arg {argCName = "required_year", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Major/year required", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "required_release", argType = TBasicType TUInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Release version required", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : False
-- Skip return : False

foreign import ccall "ostree_check_version" ostree_check_version ::
    Word32 ->                               -- required_year : TBasicType TUInt
    Word32 ->                               -- required_release : TBasicType TUInt
    IO CInt

{- |
/No description available in the introspection data./
-}
checkVersion ::
    (B.CallStack.HasCallStack, MonadIO m) =>
    Word32
    {- ^ /@requiredYear@/: Major\/year required -}
    -> Word32
    {- ^ /@requiredRelease@/: Release version required -}
    -> m Bool
    {- ^ __Returns:__ 'True' if current libostree has at least the requested version, 'False' otherwise -}
checkVersion requiredYear requiredRelease = liftIO $ do
    result <- ostree_check_version requiredYear requiredRelease
    let result' = (/= 0) result
    return result'


-- function ostree_break_hardlink
-- Args : [Arg {argCName = "dfd", argType = TBasicType TInt, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Directory fd", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "path", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Path relative to @dfd", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "skip_xattrs", argType = TBasicType TBoolean, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Do not copy extended attributes", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "cancellable", argType = TInterface (Name {namespace = "Gio", name = "Cancellable"}), direction = DirectionIn, mayBeNull = True, argDoc = Documentation {rawDocText = Nothing, sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}]
-- Lengths : []
-- returnType : Just (TBasicType TBoolean)
-- throws : True
-- Skip return : False

foreign import ccall "ostree_break_hardlink" ostree_break_hardlink ::
    Int32 ->                                -- dfd : TBasicType TInt
    CString ->                              -- path : TBasicType TUTF8
    CInt ->                                 -- skip_xattrs : TBasicType TBoolean
    Ptr Gio.Cancellable.Cancellable ->      -- cancellable : TInterface (Name {namespace = "Gio", name = "Cancellable"})
    Ptr (Ptr GError) ->                     -- error
    IO CInt

{- |
In many cases using libostree, a program may need to \"break\"
hardlinks by performing a copy.  For example, in order to
logically append to a file.

This function performs full copying, including e.g. extended
attributes and permissions of both regular files and symbolic links.

If the file is not hardlinked, this function does nothing and
returns successfully.

This function does not perform synchronization via @fsync()@ or
@fdatasync()@; the idea is this will commonly be done as part
of an @ostree_repo_commit_transaction()@, which itself takes
care of synchronization.

/Since: 2017.15/
-}
breakHardlink ::
    (B.CallStack.HasCallStack, MonadIO m, Gio.Cancellable.IsCancellable a) =>
    Int32
    {- ^ /@dfd@/: Directory fd -}
    -> T.Text
    {- ^ /@path@/: Path relative to /@dfd@/ -}
    -> Bool
    {- ^ /@skipXattrs@/: Do not copy extended attributes -}
    -> Maybe (a)
    -> m ()
    {- ^ /(Can throw 'Data.GI.Base.GError.GError')/ -}
breakHardlink dfd path skipXattrs cancellable = liftIO $ do
    path' <- textToCString path
    let skipXattrs' = (fromIntegral . fromEnum) skipXattrs
    maybeCancellable <- case cancellable of
        Nothing -> return nullPtr
        Just jCancellable -> do
            jCancellable' <- unsafeManagedPtrCastPtr jCancellable
            return jCancellable'
    onException (do
        _ <- propagateGError $ ostree_break_hardlink dfd path' skipXattrs' maybeCancellable
        whenJust cancellable touchManagedPtr
        freeMem path'
        return ()
     ) (do
        freeMem path'
     )