{-| Module : Pangraph.GraphML.Parser Description : The parser for GraphML Provides two functions for constructing a `Pangraph` from a GraphML file. -} module Pangraph.GraphML.Parser ( parse, unsafeParse ) where import Data.Maybe import Data.ByteString(ByteString) import Pangraph import qualified Pangraph.Internal.HexmlExtra as H import qualified Pangraph.Internal.XMLTemplate as PT -- * Parsing -- | Throws on on failed XML parsing. -- Otherwise returns 'Right Pangraph' if the graph is well formed, listing 'Left [MalformedEdge]' otherwise. parse :: ByteString -> Maybe Pangraph parse = PT.hexmlToPangraph PT.graphMLTemplate . H.hexmlParse -- | Like 'parse' except it throws an error on Nothing, which is when parsing fails OR the graph is malformed. unsafeParse :: ByteString -> Pangraph unsafeParse file = fromJust (error "Parse failed") (parse file)