module Data.GI.GIR.Object
( Object(..)
, parseObject
) where
import Data.Text (Text)
import Data.GI.GIR.Method (Method, parseMethod, MethodType(..))
import Data.GI.GIR.Property (Property, parseProperty)
import Data.GI.GIR.Signal (Signal, parseSignal)
import Data.GI.GIR.Parser
import Data.GI.GIR.Type (queryCType)
data Object = Object {
objParent :: Maybe Name,
objTypeInit :: Text,
objTypeName :: Text,
objCType :: Maybe Text,
objInterfaces :: [Name],
objDeprecated :: Maybe DeprecationInfo,
objDocumentation :: Documentation,
objMethods :: [Method],
objProperties :: [Property],
objSignals :: [Signal]
} deriving Show
parseObject :: Parser (Name, Object)
parseObject = do
name <- parseName
deprecated <- parseDeprecation
doc <- parseDocumentation
methods <- parseChildrenWithLocalName "method" (parseMethod OrdinaryMethod)
constructors <- parseChildrenWithLocalName "constructor" (parseMethod Constructor)
functions <- parseChildrenWithLocalName "function" (parseMethod MemberFunction)
parent <- optionalAttr "parent" Nothing (fmap Just . qualifyName)
interfaces <- parseChildrenWithLocalName "implements" parseName
props <- parseChildrenWithLocalName "property" parseProperty
typeInit <- getAttrWithNamespace GLibGIRNS "get-type"
typeName <- getAttrWithNamespace GLibGIRNS "type-name"
signals <- parseChildrenWithNSName GLibGIRNS "signal" parseSignal
ctype <- queryCType
return (name,
Object {
objParent = parent
, objTypeInit = typeInit
, objCType = ctype
, objTypeName = typeName
, objInterfaces = interfaces
, objDeprecated = deprecated
, objDocumentation = doc
, objMethods = constructors ++ methods ++ functions
, objProperties = props
, objSignals = signals
})