{- | Copyright : Will Thompson, Iñaki García Etxebarria and Jonas Platte License : LGPL-2.1 Maintainer : Iñaki García Etxebarria (inaki@blueleaf.cc) GIBaseInfo is the common base struct of all other *Info structs accessible through the 'GI.GIRepository.Objects.Repository.Repository' API. All other structs can be casted to a 'GI.GIRepository.Structs.BaseInfo.BaseInfo', for instance: \ \Casting a @/GIFunctionInfo/@ to 'GI.GIRepository.Structs.BaseInfo.BaseInfo'\<\/title> \<programlisting> GIFunctionInfo *function_info = ...; GIBaseInfo *info = (GIBaseInfo*)function_info; \<\/programlisting> \<\/example> Most 'GI.GIRepository.Objects.Repository.Repository' APIs returning a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' is actually creating a new struct, in other words, @/g_base_info_unref()/@ has to be called when done accessing the data. GIBaseInfos are normally accessed by calling either 'GI.GIRepository.Objects.Repository.repositoryFindByName', 'GI.GIRepository.Objects.Repository.repositoryFindByGtype' or 'GI.GIRepository.Objects.Repository.repositoryGetInfo'. \<example> \<title>Getting the Button of the Gtk typelib\<\/title> \<programlisting> GIBaseInfo *button_info = g_irepository_find_by_name(NULL, \"Gtk\", \"Button\"); ... use button_info ... g_base_info_unref(button_info); \<\/programlisting> \<\/example> \<refsect1 id=\"gi-gibaseinfo.struct-hierarchy\" role=\"struct_hierarchy\"> \<title role=\"struct_hierarchy.title\">Struct hierarchy\<\/title> \<synopsis> GIBaseInfo +----\<link linkend=\"gi-GIArgInfo\">GIArgInfo\<\/link> +----\<link linkend=\"gi-GICallableInfo\">GICallableInfo\<\/link> +----\<link linkend=\"gi-GIConstantInfo\">GIConstantInfo\<\/link> +----\<link linkend=\"gi-GIFieldInfo\">GIFieldInfo\<\/link> +----\<link linkend=\"gi-GIPropertyInfo\">GIPropertyInfo\<\/link> +----\<link linkend=\"gi-GIRegisteredTypeInfo\">GIRegisteredTypeInfo\<\/link> +----\<link linkend=\"gi-GITypeInfo\">GITypeInfo\<\/link> \<\/synopsis> \<\/refsect1> -} #define ENABLE_OVERLOADING (MIN_VERSION_haskell_gi_overloading(1,0,0) \ && !defined(__HADDOCK_VERSION__)) module GI.GIRepository.Structs.BaseInfo ( -- * Exported types BaseInfo(..) , newZeroBaseInfo , noBaseInfo , -- * Methods -- ** equal #method:equal# #if ENABLE_OVERLOADING BaseInfoEqualMethodInfo , #endif baseInfoEqual , -- ** getAttribute #method:getAttribute# #if ENABLE_OVERLOADING BaseInfoGetAttributeMethodInfo , #endif baseInfoGetAttribute , -- ** getContainer #method:getContainer# #if ENABLE_OVERLOADING BaseInfoGetContainerMethodInfo , #endif baseInfoGetContainer , -- ** getName #method:getName# #if ENABLE_OVERLOADING BaseInfoGetNameMethodInfo , #endif baseInfoGetName , -- ** getNamespace #method:getNamespace# #if ENABLE_OVERLOADING BaseInfoGetNamespaceMethodInfo , #endif baseInfoGetNamespace , -- ** getType #method:getType# #if ENABLE_OVERLOADING BaseInfoGetTypeMethodInfo , #endif baseInfoGetType , -- ** getTypelib #method:getTypelib# #if ENABLE_OVERLOADING BaseInfoGetTypelibMethodInfo , #endif baseInfoGetTypelib , -- ** isDeprecated #method:isDeprecated# #if ENABLE_OVERLOADING BaseInfoIsDeprecatedMethodInfo , #endif baseInfoIsDeprecated , -- ** iterateAttributes #method:iterateAttributes# #if ENABLE_OVERLOADING BaseInfoIterateAttributesMethodInfo , #endif baseInfoIterateAttributes , ) 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 {-# SOURCE #-} qualified GI.GIRepository.Enums as GIRepository.Enums import {-# SOURCE #-} qualified GI.GIRepository.Structs.AttributeIter as GIRepository.AttributeIter import {-# SOURCE #-} qualified GI.GIRepository.Structs.Typelib as GIRepository.Typelib -- | Memory-managed wrapper type. newtype BaseInfo = BaseInfo (ManagedPtr BaseInfo) foreign import ccall "g_base_info_gtype_get_type" c_g_base_info_gtype_get_type :: IO GType instance BoxedObject BaseInfo where boxedType _ = c_g_base_info_gtype_get_type -- | Construct a `BaseInfo` struct initialized to zero. newZeroBaseInfo :: MonadIO m => m BaseInfo newZeroBaseInfo = liftIO $ callocBoxedBytes 72 >>= wrapBoxed BaseInfo instance tag ~ 'AttrSet => Constructible BaseInfo tag where new _ attrs = do o <- newZeroBaseInfo GI.Attributes.set o attrs return o -- | A convenience alias for `Nothing` :: `Maybe` `BaseInfo`. noBaseInfo :: Maybe BaseInfo noBaseInfo = Nothing #if ENABLE_OVERLOADING instance O.HasAttributeList BaseInfo type instance O.AttributeList BaseInfo = BaseInfoAttributeList type BaseInfoAttributeList = ('[ ] :: [(Symbol, *)]) #endif -- method BaseInfo::equal -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info1", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "info2", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", 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 "g_base_info_equal" g_base_info_equal :: Ptr BaseInfo -> -- info1 : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) Ptr BaseInfo -> -- info2 : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO CInt {- | Compare two 'GI.GIRepository.Structs.BaseInfo.BaseInfo'. Using pointer comparison is not practical since many functions return different instances of 'GI.GIRepository.Structs.BaseInfo.BaseInfo' that refers to the same part of the TypeLib; use this function instead to do 'GI.GIRepository.Structs.BaseInfo.BaseInfo' comparisons. -} baseInfoEqual :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info1@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> BaseInfo {- ^ /@info2@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m Bool {- ^ __Returns:__ 'True' if and only if /@info1@/ equals /@info2@/. -} baseInfoEqual info1 info2 = liftIO $ do info1' <- unsafeManagedPtrGetPtr info1 info2' <- unsafeManagedPtrGetPtr info2 result <- g_base_info_equal info1' info2' let result' = (/= 0) result touchManagedPtr info1 touchManagedPtr info2 return result' #if ENABLE_OVERLOADING data BaseInfoEqualMethodInfo instance (signature ~ (BaseInfo -> m Bool), MonadIO m) => O.MethodInfo BaseInfoEqualMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoEqual #endif -- method BaseInfo::get_attribute -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a freeform string naming an attribute", 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 "g_base_info_get_attribute" g_base_info_get_attribute :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) CString -> -- name : TBasicType TUTF8 IO CString {- | Retrieve an arbitrary attribute associated with this node. -} baseInfoGetAttribute :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> T.Text {- ^ /@name@/: a freeform string naming an attribute -} -> m T.Text {- ^ __Returns:__ The value of the attribute, or 'Nothing' if no such attribute exists -} baseInfoGetAttribute info name = liftIO $ do info' <- unsafeManagedPtrGetPtr info name' <- textToCString name result <- g_base_info_get_attribute info' name' checkUnexpectedReturnNULL "baseInfoGetAttribute" result result' <- cstringToText result touchManagedPtr info freeMem name' return result' #if ENABLE_OVERLOADING data BaseInfoGetAttributeMethodInfo instance (signature ~ (T.Text -> m T.Text), MonadIO m) => O.MethodInfo BaseInfoGetAttributeMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetAttribute #endif -- method BaseInfo::get_container -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "GIRepository", name = "BaseInfo"})) -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_container" g_base_info_get_container :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO (Ptr BaseInfo) {- | Obtain the container of the /@info@/. The container is the parent GIBaseInfo. For instance, the parent of a @/GIFunctionInfo/@ is an @/GIObjectInfo/@ or @/GIInterfaceInfo/@. -} baseInfoGetContainer :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m BaseInfo {- ^ __Returns:__ the container -} baseInfoGetContainer info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_get_container info' checkUnexpectedReturnNULL "baseInfoGetContainer" result result' <- (newBoxed BaseInfo) result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoGetContainerMethodInfo instance (signature ~ (m BaseInfo), MonadIO m) => O.MethodInfo BaseInfoGetContainerMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetContainer #endif -- method BaseInfo::get_name -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", 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 "g_base_info_get_name" g_base_info_get_name :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO CString {- | Obtain the name of the /@info@/. What the name represents depends on the 'GI.GIRepository.Enums.InfoType' of the /@info@/. For instance for @/GIFunctionInfo/@ it is the name of the function. -} baseInfoGetName :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m T.Text {- ^ __Returns:__ the name of /@info@/ or 'Nothing' if it lacks a name. -} baseInfoGetName info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_get_name info' checkUnexpectedReturnNULL "baseInfoGetName" result result' <- cstringToText result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoGetNameMethodInfo instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo BaseInfoGetNameMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetName #endif -- method BaseInfo::get_namespace -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", 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 "g_base_info_get_namespace" g_base_info_get_namespace :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO CString {- | Obtain the namespace of /@info@/. -} baseInfoGetNamespace :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m T.Text {- ^ __Returns:__ the namespace -} baseInfoGetNamespace info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_get_namespace info' checkUnexpectedReturnNULL "baseInfoGetNamespace" result result' <- cstringToText result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoGetNamespaceMethodInfo instance (signature ~ (m T.Text), MonadIO m) => O.MethodInfo BaseInfoGetNamespaceMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetNamespace #endif -- method BaseInfo::get_type -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "GIRepository", name = "InfoType"})) -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_type" g_base_info_get_type :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO CUInt {- | Obtain the info type of the GIBaseInfo. -} baseInfoGetType :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m GIRepository.Enums.InfoType {- ^ __Returns:__ the info type of /@info@/ -} baseInfoGetType info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_get_type info' let result' = (toEnum . fromIntegral) result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoGetTypeMethodInfo instance (signature ~ (m GIRepository.Enums.InfoType), MonadIO m) => O.MethodInfo BaseInfoGetTypeMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetType #endif -- method BaseInfo::get_typelib -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing}] -- Lengths : [] -- returnType : Just (TInterface (Name {namespace = "GIRepository", name = "Typelib"})) -- throws : False -- Skip return : False foreign import ccall "g_base_info_get_typelib" g_base_info_get_typelib :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO (Ptr GIRepository.Typelib.Typelib) {- | Obtain the typelib this /@info@/ belongs to -} baseInfoGetTypelib :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m GIRepository.Typelib.Typelib {- ^ __Returns:__ the typelib. -} baseInfoGetTypelib info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_get_typelib info' checkUnexpectedReturnNULL "baseInfoGetTypelib" result result' <- (newPtr GIRepository.Typelib.Typelib) result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoGetTypelibMethodInfo instance (signature ~ (m GIRepository.Typelib.Typelib), MonadIO m) => O.MethodInfo BaseInfoGetTypelibMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoGetTypelib #endif -- method BaseInfo::is_deprecated -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", 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 "g_base_info_is_deprecated" g_base_info_is_deprecated :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) IO CInt {- | Obtain whether the /@info@/ is represents a metadata which is deprecated or not. -} baseInfoIsDeprecated :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> m Bool {- ^ __Returns:__ 'True' if deprecated -} baseInfoIsDeprecated info = liftIO $ do info' <- unsafeManagedPtrGetPtr info result <- g_base_info_is_deprecated info' let result' = (/= 0) result touchManagedPtr info return result' #if ENABLE_OVERLOADING data BaseInfoIsDeprecatedMethodInfo instance (signature ~ (m Bool), MonadIO m) => O.MethodInfo BaseInfoIsDeprecatedMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoIsDeprecated #endif -- method BaseInfo::iterate_attributes -- method type : OrdinaryMethod -- Args : [Arg {argCName = "info", argType = TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIBaseInfo", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "iterator", argType = TInterface (Name {namespace = "GIRepository", name = "AttributeIter"}), direction = DirectionIn, mayBeNull = False, argDoc = Documentation {rawDocText = Just "a #GIAttributeIter structure, must be initialized; see below", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferEverything},Arg {argCName = "name", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Returned name, must not be freed", sinceVersion = Nothing}, argScope = ScopeTypeInvalid, argClosure = -1, argDestroy = -1, argCallerAllocates = False, transfer = TransferNothing},Arg {argCName = "value", argType = TBasicType TUTF8, direction = DirectionOut, mayBeNull = False, argDoc = Documentation {rawDocText = Just "Returned name, must not be freed", 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 "g_base_info_iterate_attributes" g_base_info_iterate_attributes :: Ptr BaseInfo -> -- info : TInterface (Name {namespace = "GIRepository", name = "BaseInfo"}) Ptr GIRepository.AttributeIter.AttributeIter -> -- iterator : TInterface (Name {namespace = "GIRepository", name = "AttributeIter"}) Ptr CString -> -- name : TBasicType TUTF8 Ptr CString -> -- value : TBasicType TUTF8 IO CInt {- | Iterate over all attributes associated with this node. The iterator structure is typically stack allocated, and must have its first member initialized to 'Nothing'. Attributes are arbitrary namespaced key–value pairs which can be attached to almost any item. They are intended for use by software higher in the toolchain than bindings, and are distinct from normal GIR annotations. Both the /@name@/ and /@value@/ should be treated as constants and must not be freed. \<example> \<title>Iterating over attributes\<\/title> \<programlisting> void print_attributes (GIBaseInfo *info) { GIAttributeIter iter = { 0, }; char *name; char *value; while (g_base_info_iterate_attributes (info, &iter, &name, &value)) { g_print (\"attribute name: @/s/@ value: @/s/@\", name, value); } } \<\/programlisting> \<\/example> -} baseInfoIterateAttributes :: (B.CallStack.HasCallStack, MonadIO m) => BaseInfo {- ^ /@info@/: a 'GI.GIRepository.Structs.BaseInfo.BaseInfo' -} -> GIRepository.AttributeIter.AttributeIter {- ^ /@iterator@/: a 'GI.GIRepository.Structs.AttributeIter.AttributeIter' structure, must be initialized; see below -} -> m ((Bool, T.Text, T.Text)) {- ^ __Returns:__ 'True' if there are more attributes -} baseInfoIterateAttributes info iterator = liftIO $ do info' <- unsafeManagedPtrGetPtr info iterator' <- unsafeManagedPtrGetPtr iterator name <- allocMem :: IO (Ptr CString) value <- allocMem :: IO (Ptr CString) result <- g_base_info_iterate_attributes info' iterator' name value let result' = (/= 0) result name' <- peek name name'' <- cstringToText name' value' <- peek value value'' <- cstringToText value' touchManagedPtr info touchManagedPtr iterator freeMem name freeMem value return (result', name'', value'') #if ENABLE_OVERLOADING data BaseInfoIterateAttributesMethodInfo instance (signature ~ (GIRepository.AttributeIter.AttributeIter -> m ((Bool, T.Text, T.Text))), MonadIO m) => O.MethodInfo BaseInfoIterateAttributesMethodInfo BaseInfo signature where overloadedMethod _ = baseInfoIterateAttributes #endif #if ENABLE_OVERLOADING type family ResolveBaseInfoMethod (t :: Symbol) (o :: *) :: * where ResolveBaseInfoMethod "equal" o = BaseInfoEqualMethodInfo ResolveBaseInfoMethod "isDeprecated" o = BaseInfoIsDeprecatedMethodInfo ResolveBaseInfoMethod "iterateAttributes" o = BaseInfoIterateAttributesMethodInfo ResolveBaseInfoMethod "getAttribute" o = BaseInfoGetAttributeMethodInfo ResolveBaseInfoMethod "getContainer" o = BaseInfoGetContainerMethodInfo ResolveBaseInfoMethod "getName" o = BaseInfoGetNameMethodInfo ResolveBaseInfoMethod "getNamespace" o = BaseInfoGetNamespaceMethodInfo ResolveBaseInfoMethod "getType" o = BaseInfoGetTypeMethodInfo ResolveBaseInfoMethod "getTypelib" o = BaseInfoGetTypelibMethodInfo ResolveBaseInfoMethod l o = O.MethodResolutionFailed l o instance (info ~ ResolveBaseInfoMethod t BaseInfo, O.MethodInfo info BaseInfo p) => OL.IsLabel t (BaseInfo -> p) where #if MIN_VERSION_base(4,10,0) fromLabel = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #else fromLabel _ = O.overloadedMethod (O.MethodProxy :: O.MethodProxy info) #endif #endif