module Writer
( WriteFormat(..)
, apply
) where
import Data.Convertible
( convert
)
import Config
( Configuration(..)
)
import Data.Error
( Error
)
import Data.Specification
( Specification
)
import Writer.Utils
( checkLower
)
import Writer.Error
( prError
)
import Writer.Formats
( WriteFormat(..)
, needsLower
)
import Control.Monad
( when
)
import qualified Writer.Formats.Utf8 as Utf8
import qualified Writer.Formats.Wring as Wring
import qualified Writer.Formats.Promela as Promela
import qualified Writer.Formats.Acacia as Acacia
import qualified Writer.Formats.AcaciaSpecs as AcaciaSpecs
import qualified Writer.Formats.Lily as Lily
import qualified Writer.Formats.Ltlxba as Ltlxba
import qualified Writer.Formats.Unbeast as Unbeast
import qualified Writer.Formats.Slugs as Slugs
import qualified Writer.Formats.SlugsIn as SlugsIn
import qualified Writer.Formats.Basic as Basic
import qualified Writer.Formats.Full as Full
import qualified Writer.Formats.Psl as Psl
import qualified Writer.Formats.Smv as Smv
import qualified Writer.Formats.Bosy as Bosy
apply
:: Configuration -> Specification -> Either Error String
apply c@Configuration{..} s = do
when (needsLower outputFormat) $
checkLower (convert outputFormat) s
case outputFormat of
UTF8 -> Utf8.writeFormat c s
BASIC -> Basic.writeFormat c s
FULL -> Full.writeFormat c s
WRING -> Wring.writeFormat c s
LTLXBA -> Ltlxba.writeFormat c s
LILY -> Lily.writeFormat c s
ACACIA -> Acacia.writeFormat c s
ACACIASPECS -> AcaciaSpecs.writeFormat c s
PROMELA -> Promela.writeFormat c s
UNBEAST -> Unbeast.writeFormat c s
SLUGS -> Slugs.writeFormat c s
SLUGSIN -> SlugsIn.writeFormat c s
PSL -> Psl.writeFormat c s
SMV -> Smv.writeFormat c s
BOSY -> Bosy.writeFormat c s