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

module GI.GIRepository.Objects.Repository
    ( 

-- * Exported types
    Repository(..)                          ,
    RepositoryK                             ,
    toRepository                            ,
    noRepository                            ,


 -- * Methods
-- ** repositoryDump
    repositoryDump                          ,


-- ** repositoryEnumerateVersions
    repositoryEnumerateVersions             ,


-- ** repositoryErrorQuark
    repositoryErrorQuark                    ,


-- ** repositoryFindByErrorDomain
    repositoryFindByErrorDomain             ,


-- ** repositoryFindByGtype
    repositoryFindByGtype                   ,


-- ** repositoryFindByName
    repositoryFindByName                    ,


-- ** repositoryGetCPrefix
    repositoryGetCPrefix                    ,


-- ** repositoryGetDefault
    repositoryGetDefault                    ,


-- ** repositoryGetDependencies
    repositoryGetDependencies               ,


-- ** repositoryGetImmediateDependencies
    repositoryGetImmediateDependencies      ,


-- ** repositoryGetInfo
    repositoryGetInfo                       ,


-- ** repositoryGetLoadedNamespaces
    repositoryGetLoadedNamespaces           ,


-- ** repositoryGetNInfos
    repositoryGetNInfos                     ,


-- ** repositoryGetSearchPath
    repositoryGetSearchPath                 ,


-- ** repositoryGetSharedLibrary
    repositoryGetSharedLibrary              ,


-- ** repositoryGetTypelibPath
    repositoryGetTypelibPath                ,


-- ** repositoryGetVersion
    repositoryGetVersion                    ,


-- ** repositoryIsRegistered
    repositoryIsRegistered                  ,


-- ** repositoryLoadTypelib
    repositoryLoadTypelib                   ,


-- ** repositoryPrependLibraryPath
    repositoryPrependLibraryPath            ,


-- ** repositoryPrependSearchPath
    repositoryPrependSearchPath             ,


-- ** repositoryRequire
    repositoryRequire                       ,


-- ** repositoryRequirePrivate
    repositoryRequirePrivate                ,




    ) where

import Prelude ()
import Data.GI.Base.ShortPrelude

import qualified Data.Text as T
import qualified Data.ByteString.Char8 as B
import qualified Data.Map as Map

import GI.GIRepository.Types
import GI.GIRepository.Callbacks
import qualified GI.GObject as GObject

newtype Repository = Repository (ForeignPtr Repository)
foreign import ccall "g_irepository_get_type"
    c_g_irepository_get_type :: IO GType

type instance ParentTypes Repository = RepositoryParentTypes
type RepositoryParentTypes = '[GObject.Object]

instance GObject Repository where
    gobjectIsInitiallyUnowned _ = False
    gobjectType _ = c_g_irepository_get_type
    

class GObject o => RepositoryK o
instance (GObject o, IsDescendantOf Repository o) => RepositoryK o

toRepository :: RepositoryK o => o -> IO Repository
toRepository = unsafeCastTo Repository

noRepository :: Maybe Repository
noRepository = Nothing

type instance AttributeList Repository = RepositoryAttributeList
type RepositoryAttributeList = ('[ ] :: [(Symbol, *)])

type instance SignalList Repository = RepositorySignalList
type RepositorySignalList = ('[ '("notify", GObject.ObjectNotifySignalInfo), '("notify::[property]", GObjectNotifySignalInfo)] :: [(Symbol, *)])

-- method Repository::enumerate_versions
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TGList (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_enumerate_versions" g_irepository_enumerate_versions :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO (Ptr (GList CString))


repositoryEnumerateVersions ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m [T.Text]
repositoryEnumerateVersions _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_enumerate_versions _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_enumerate_versions" result
    result' <- unpackGList result
    result'' <- mapM cstringToText result'
    mapGList freeMem result
    g_list_free result
    touchManagedPtr _obj
    freeMem namespace_'
    return result''

-- method Repository::find_by_error_domain
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "domain", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "domain", argType = TBasicType TUInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "BaseInfo"
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_find_by_error_domain" g_irepository_find_by_error_domain :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    Word32 ->                               -- domain : TBasicType TUInt32
    IO (Ptr BaseInfo)


repositoryFindByErrorDomain ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    Word32 ->                               -- domain
    m BaseInfo
repositoryFindByErrorDomain _obj domain = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- g_irepository_find_by_error_domain _obj' domain
    checkUnexpectedReturnNULL "g_irepository_find_by_error_domain" result
    result' <- (wrapBoxed BaseInfo) result
    touchManagedPtr _obj
    return result'

-- method Repository::find_by_gtype
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "gtype", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "gtype", argType = TBasicType TGType, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "BaseInfo"
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_find_by_gtype" g_irepository_find_by_gtype :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CGType ->                               -- gtype : TBasicType TGType
    IO (Ptr BaseInfo)


repositoryFindByGtype ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    GType ->                                -- gtype
    m BaseInfo
repositoryFindByGtype _obj gtype = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let gtype' = gtypeToCGType gtype
    result <- g_irepository_find_by_gtype _obj' gtype'
    checkUnexpectedReturnNULL "g_irepository_find_by_gtype" result
    result' <- (wrapBoxed BaseInfo) result
    touchManagedPtr _obj
    return result'

-- method Repository::find_by_name
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "BaseInfo"
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_find_by_name" g_irepository_find_by_name :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    CString ->                              -- name : TBasicType TUTF8
    IO (Ptr BaseInfo)


repositoryFindByName ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    T.Text ->                               -- name
    m BaseInfo
repositoryFindByName _obj namespace_ name = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    name' <- textToCString name
    result <- g_irepository_find_by_name _obj' namespace_' name'
    checkUnexpectedReturnNULL "g_irepository_find_by_name" result
    result' <- (wrapBoxed BaseInfo) result
    touchManagedPtr _obj
    freeMem namespace_'
    freeMem name'
    return result'

-- method Repository::get_c_prefix
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_c_prefix" g_irepository_get_c_prefix :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO CString


repositoryGetCPrefix ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m T.Text
repositoryGetCPrefix _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_c_prefix _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_c_prefix" result
    result' <- cstringToText result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_dependencies
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TCArray True (-1) (-1) (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_dependencies" g_irepository_get_dependencies :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO (Ptr CString)


repositoryGetDependencies ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m [T.Text]
repositoryGetDependencies _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_dependencies _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_dependencies" result
    result' <- unpackZeroTerminatedUTF8CArray result
    mapZeroTerminatedCArray freeMem result
    freeMem result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_immediate_dependencies
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TCArray True (-1) (-1) (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_immediate_dependencies" g_irepository_get_immediate_dependencies :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO (Ptr CString)


repositoryGetImmediateDependencies ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m [T.Text]
repositoryGetImmediateDependencies _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_immediate_dependencies _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_immediate_dependencies" result
    result' <- unpackZeroTerminatedUTF8CArray result
    mapZeroTerminatedCArray freeMem result
    freeMem result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_info
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "index", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "index", argType = TBasicType TInt32, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "BaseInfo"
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_info" g_irepository_get_info :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    Int32 ->                                -- index : TBasicType TInt32
    IO (Ptr BaseInfo)


repositoryGetInfo ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    Int32 ->                                -- index
    m BaseInfo
repositoryGetInfo _obj namespace_ index = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_info _obj' namespace_' index
    checkUnexpectedReturnNULL "g_irepository_get_info" result
    result' <- (wrapBoxed BaseInfo) result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_loaded_namespaces
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TCArray True (-1) (-1) (TBasicType TUTF8)
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_loaded_namespaces" g_irepository_get_loaded_namespaces :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    IO (Ptr CString)


repositoryGetLoadedNamespaces ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    m [T.Text]
repositoryGetLoadedNamespaces _obj = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    result <- g_irepository_get_loaded_namespaces _obj'
    checkUnexpectedReturnNULL "g_irepository_get_loaded_namespaces" result
    result' <- unpackZeroTerminatedUTF8CArray result
    mapZeroTerminatedCArray freeMem result
    freeMem result
    touchManagedPtr _obj
    return result'

-- method Repository::get_n_infos
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TInt32
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_n_infos" g_irepository_get_n_infos :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO Int32


repositoryGetNInfos ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m Int32
repositoryGetNInfos _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_n_infos _obj' namespace_'
    touchManagedPtr _obj
    freeMem namespace_'
    return result

-- method Repository::get_shared_library
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_shared_library" g_irepository_get_shared_library :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO CString


repositoryGetSharedLibrary ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m T.Text
repositoryGetSharedLibrary _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_shared_library _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_shared_library" result
    result' <- cstringToText result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_typelib_path
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_typelib_path" g_irepository_get_typelib_path :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO CString


repositoryGetTypelibPath ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m T.Text
repositoryGetTypelibPath _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_typelib_path _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_typelib_path" result
    result' <- cstringToText result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::get_version
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_version" g_irepository_get_version :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    IO CString


repositoryGetVersion ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    m T.Text
repositoryGetVersion _obj namespace_ = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    result <- g_irepository_get_version _obj' namespace_'
    checkUnexpectedReturnNULL "g_irepository_get_version" result
    result' <- cstringToText result
    touchManagedPtr _obj
    freeMem namespace_'
    return result'

-- method Repository::is_registered
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_is_registered" g_irepository_is_registered :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    CString ->                              -- version : TBasicType TUTF8
    IO CInt


repositoryIsRegistered ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    Maybe (T.Text) ->                       -- version
    m Bool
repositoryIsRegistered _obj namespace_ version = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    maybeVersion <- case version of
        Nothing -> return nullPtr
        Just jVersion -> do
            jVersion' <- textToCString jVersion
            return jVersion'
    result <- g_irepository_is_registered _obj' namespace_' maybeVersion
    let result' = (/= 0) result
    touchManagedPtr _obj
    freeMem namespace_'
    freeMem maybeVersion
    return result'

-- method Repository::load_typelib
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "typelib", argType = TInterface "GIRepository" "Typelib", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "typelib", argType = TInterface "GIRepository" "Typelib", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TUTF8
-- throws : True
-- Skip return : False

foreign import ccall "g_irepository_load_typelib" g_irepository_load_typelib :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    Ptr Typelib ->                          -- typelib : TInterface "GIRepository" "Typelib"
    CUInt ->                                -- flags : TInterface "GIRepository" "RepositoryLoadFlags"
    Ptr (Ptr GError) ->                     -- error
    IO CString


repositoryLoadTypelib ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    Typelib ->                              -- typelib
    [RepositoryLoadFlags] ->                -- flags
    m T.Text
repositoryLoadTypelib _obj typelib flags = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    let typelib' = unsafeManagedPtrGetPtr typelib
    let flags' = gflagsToWord flags
    onException (do
        result <- propagateGError $ g_irepository_load_typelib _obj' typelib' flags'
        checkUnexpectedReturnNULL "g_irepository_load_typelib" result
        result' <- cstringToText result
        touchManagedPtr _obj
        touchManagedPtr typelib
        return result'
     ) (do
        return ()
     )

-- method Repository::require
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "Typelib"
-- throws : True
-- Skip return : False

foreign import ccall "g_irepository_require" g_irepository_require :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- namespace_ : TBasicType TUTF8
    CString ->                              -- version : TBasicType TUTF8
    CUInt ->                                -- flags : TInterface "GIRepository" "RepositoryLoadFlags"
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr Typelib)


repositoryRequire ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- namespace_
    Maybe (T.Text) ->                       -- version
    [RepositoryLoadFlags] ->                -- flags
    m Typelib
repositoryRequire _obj namespace_ version flags = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    namespace_' <- textToCString namespace_
    maybeVersion <- case version of
        Nothing -> return nullPtr
        Just jVersion -> do
            jVersion' <- textToCString jVersion
            return jVersion'
    let flags' = gflagsToWord flags
    onException (do
        result <- propagateGError $ g_irepository_require _obj' namespace_' maybeVersion flags'
        checkUnexpectedReturnNULL "g_irepository_require" result
        -- XXX Wrapping a foreign struct/union with no known destructor, leak?
        result' <- (\x -> Typelib <$> newForeignPtr_ x) result
        touchManagedPtr _obj
        freeMem namespace_'
        freeMem maybeVersion
        return result'
     ) (do
        freeMem namespace_'
        freeMem maybeVersion
     )

-- method Repository::require_private
-- method type : OrdinaryMethod
-- Args : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "typelib_dir", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "_obj", argType = TInterface "GIRepository" "Repository", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "typelib_dir", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "namespace_", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "version", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = True, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing},Arg {argName = "flags", argType = TInterface "GIRepository" "RepositoryLoadFlags", direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TInterface "GIRepository" "Typelib"
-- throws : True
-- Skip return : False

foreign import ccall "g_irepository_require_private" g_irepository_require_private :: 
    Ptr Repository ->                       -- _obj : TInterface "GIRepository" "Repository"
    CString ->                              -- typelib_dir : TBasicType TUTF8
    CString ->                              -- namespace_ : TBasicType TUTF8
    CString ->                              -- version : TBasicType TUTF8
    CUInt ->                                -- flags : TInterface "GIRepository" "RepositoryLoadFlags"
    Ptr (Ptr GError) ->                     -- error
    IO (Ptr Typelib)


repositoryRequirePrivate ::
    (MonadIO m, RepositoryK a) =>
    a ->                                    -- _obj
    T.Text ->                               -- typelib_dir
    T.Text ->                               -- namespace_
    Maybe (T.Text) ->                       -- version
    [RepositoryLoadFlags] ->                -- flags
    m Typelib
repositoryRequirePrivate _obj typelib_dir namespace_ version flags = liftIO $ do
    let _obj' = unsafeManagedPtrCastPtr _obj
    typelib_dir' <- textToCString typelib_dir
    namespace_' <- textToCString namespace_
    maybeVersion <- case version of
        Nothing -> return nullPtr
        Just jVersion -> do
            jVersion' <- textToCString jVersion
            return jVersion'
    let flags' = gflagsToWord flags
    onException (do
        result <- propagateGError $ g_irepository_require_private _obj' typelib_dir' namespace_' maybeVersion flags'
        checkUnexpectedReturnNULL "g_irepository_require_private" result
        -- XXX Wrapping a foreign struct/union with no known destructor, leak?
        result' <- (\x -> Typelib <$> newForeignPtr_ x) result
        touchManagedPtr _obj
        freeMem typelib_dir'
        freeMem namespace_'
        freeMem maybeVersion
        return result'
     ) (do
        freeMem typelib_dir'
        freeMem namespace_'
        freeMem maybeVersion
     )

-- method Repository::dump
-- method type : MemberFunction
-- Args : [Arg {argName = "arg", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "arg", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TBoolean
-- throws : True
-- Skip return : False

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


repositoryDump ::
    (MonadIO m) =>
    T.Text ->                               -- arg
    m ()
repositoryDump arg = liftIO $ do
    arg' <- textToCString arg
    onException (do
        _ <- propagateGError $ g_irepository_dump arg'
        freeMem arg'
        return ()
     ) (do
        freeMem arg'
     )

-- method Repository::error_quark
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TBasicType TUInt32
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_error_quark" g_irepository_error_quark :: 
    IO Word32


repositoryErrorQuark ::
    (MonadIO m) =>
    m Word32
repositoryErrorQuark  = liftIO $ do
    result <- g_irepository_error_quark
    return result

-- method Repository::get_default
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TInterface "GIRepository" "Repository"
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_default" g_irepository_get_default :: 
    IO (Ptr Repository)


repositoryGetDefault ::
    (MonadIO m) =>
    m Repository
repositoryGetDefault  = liftIO $ do
    result <- g_irepository_get_default
    checkUnexpectedReturnNULL "g_irepository_get_default" result
    result' <- (newObject Repository) result
    return result'

-- method Repository::get_search_path
-- method type : MemberFunction
-- Args : []
-- Lengths : []
-- hInArgs : []
-- returnType : TGSList (TBasicType TFileName)
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_get_search_path" g_irepository_get_search_path :: 
    IO (Ptr (GSList CString))


repositoryGetSearchPath ::
    (MonadIO m) =>
    m [[Char]]
repositoryGetSearchPath  = liftIO $ do
    result <- g_irepository_get_search_path
    checkUnexpectedReturnNULL "g_irepository_get_search_path" result
    result' <- unpackGSList result
    result'' <- mapM cstringToString result'
    return result''

-- method Repository::prepend_library_path
-- method type : MemberFunction
-- Args : [Arg {argName = "directory", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "directory", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_prepend_library_path" g_irepository_prepend_library_path :: 
    CString ->                              -- directory : TBasicType TUTF8
    IO ()


repositoryPrependLibraryPath ::
    (MonadIO m) =>
    T.Text ->                               -- directory
    m ()
repositoryPrependLibraryPath directory = liftIO $ do
    directory' <- textToCString directory
    g_irepository_prepend_library_path directory'
    freeMem directory'
    return ()

-- method Repository::prepend_search_path
-- method type : MemberFunction
-- Args : [Arg {argName = "directory", argType = TBasicType TFileName, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- Lengths : []
-- hInArgs : [Arg {argName = "directory", argType = TBasicType TFileName, direction = DirectionIn, mayBeNull = False, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, transfer = TransferNothing}]
-- returnType : TBasicType TVoid
-- throws : False
-- Skip return : False

foreign import ccall "g_irepository_prepend_search_path" g_irepository_prepend_search_path :: 
    CString ->                              -- directory : TBasicType TFileName
    IO ()


repositoryPrependSearchPath ::
    (MonadIO m) =>
    [Char] ->                               -- directory
    m ()
repositoryPrependSearchPath directory = liftIO $ do
    directory' <- stringToCString directory
    g_irepository_prepend_search_path directory'
    freeMem directory'
    return ()