begin binding ObjectInfo
[haskell-gi:haskell-gi.git] / GI / Internal / ObjectInfo.chs
1
2 module GI.Internal.ObjectInfo
3     ( objectInfoFields
4     , objectInfoMethods
5     , objectInfoProperties
6     -- , objectInfoSignals
7     -- , objectInfoConstants
8     -- , objectInfoVFuncs
9     -- , objectInfoInterfaces
10     -- XXX: lots more stuff missing
11     ) where
12
13 import Control.Applicative ((<$>))
14 import Foreign
15 import Foreign.C
16
17 import GI.Util (getList)
18
19 {# import GI.Internal.Types #}
20
21 #include <girepository.h>
22
23 {# context prefix="g_object_info" #}
24
25 stupidCast :: ObjectInfoClass oic => oic -> Ptr ()
26 stupidCast oi = castPtr p
27     where (ObjectInfo p) = objectInfo oi
28
29 objectInfoFields :: ObjectInfoClass oic => oic -> [FieldInfo]
30 objectInfoFields oi = unsafePerformIO $
31     map (FieldInfo <$> castPtr) <$>
32     getList {# call get_n_fields #} {# call get_field #} (stupidCast oi)
33
34 objectInfoMethods :: ObjectInfoClass oic => oic -> [FunctionInfo]
35 objectInfoMethods oi = unsafePerformIO $
36     map (FunctionInfo <$> castPtr) <$>
37     getList {# call get_n_methods #} {# call get_method #} (stupidCast oi)
38
39 objectInfoProperties :: ObjectInfoClass oic => oic -> [PropertyInfo]
40 objectInfoProperties oi = unsafePerformIO $
41     map (PropertyInfo <$> castPtr) <$>
42     getList {# call get_n_properties #} {# call get_property #} (stupidCast oi)