module Language.Types where
import CoreTypes
type CardName = String
type Source = FilePath
type Destination = FilePath
data Card = Card
{ cardName :: CardName
, cardContent :: Declaration
} deriving (Show, Eq)
data Declaration
= SparkOff CardReference
| Deploy Source Destination (Maybe DeploymentKind)
| IntoDir Directory
| OutofDir Directory
| DeployKindOverride DeploymentKind
| Alternatives [Directory]
| Block [Declaration]
deriving (Show, Eq)
data CardNameReference = CardNameReference CardName
deriving (Show, Eq)
data CardFileReference = CardFileReference FilePath (Maybe CardNameReference)
deriving (Show, Eq)
instance Read CardFileReference where
readsPrec _ fp = case length (words fp) of
1 -> [(CardFileReference fp Nothing ,"")]
2 -> let [f, c] = words fp
in [(CardFileReference f (Just $ CardNameReference c), "")]
_ -> []
data CardReference = CardFile CardFileReference
| CardName CardNameReference
deriving (Show, Eq)
data SparkFile = SparkFile
{ sparkFilePath :: FilePath
, sparkFileCards :: [Card]
} deriving (Show, Eq)