module Language.Eiffel.Summary where

import qualified Data.ByteString.Char8 as B

import Data.Binary

import Language.Eiffel.Syntax
import Language.Eiffel.Parser.Class
import qualified Language.Eiffel.Parser.Lex as L
import Language.Eiffel.Parser
import Language.Eiffel.PrettyPrint

import Text.Parsec

import System.IO

summaryP :: L.Parser [ClasInterface]
summaryP = many clasInterfaceP

parseSummary :: String -> IO (Either ParseError [ClasInterface])
parseSummary fileName = lexThenParseFromFile summaryP fileName

writeSummary :: FilePath -> [ClasInterface] -> IO ()
writeSummary filePath ifaces = 
  withFile filePath WriteMode $ \ hdl ->
    mapM_ (B.hPutStrLn hdl . B.pack . show . toInterfaceDoc) ifaces

readBinarySummary :: String -> IO [ClasInterface]
readBinarySummary = decodeFile

writeBinarySummary :: String -> [ClasInterface] -> IO ()
writeBinarySummary = encodeFile