packages feed

haskell-gi-0.10: src/GI/GIR/Function.hs

module GI.GIR.Function
    ( Function(..)
    , parseFunction
    ) where

import Data.Text (Text)
import qualified Data.Text as T

import GI.GIR.Callable (Callable(..), parseCallable)
import GI.GIR.Parser

data Function = Function {
        fnSymbol :: Text,
        fnThrows :: Bool,
        fnCallable :: Callable
    } deriving Show

parseFunction :: Parser (Name, Function)
parseFunction = do
  name <- parseName
  shadows <- queryAttr "shadows"
  let exposedName = case shadows of
                      Just n -> name {name = T.unpack n}
                      Nothing -> name
  callable <- parseCallable
  symbol <- getAttrWithNamespace CGIRNS "identifier"
  throws <- optionalAttr "throws" False parseBool
  return $ (exposedName,
            Function {
              fnSymbol = symbol
            , fnCallable = callable
            , fnThrows = throws
            })