{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE DeriveGeneric #-}

module SuperUserSpark.CoreTypes where

import Import

import Control.Monad (mzero)
import Data.Aeson (FromJSON(..), ToJSON(..), Value(..))

type Directory = FilePath

-- | The kind of a deployment
data DeploymentKind
    = LinkDeployment
    | CopyDeployment
    deriving (Show, Eq, Generic)

instance Validity DeploymentKind

instance Read DeploymentKind where
    readsPrec _ "link" = [(LinkDeployment, "")]
    readsPrec _ "copy" = [(CopyDeployment, "")]
    readsPrec _ _ = []

instance FromJSON DeploymentKind where
    parseJSON (String "link") = return LinkDeployment
    parseJSON (String "copy") = return CopyDeployment
    parseJSON _ = mzero

instance ToJSON DeploymentKind where
    toJSON LinkDeployment = String "link"
    toJSON CopyDeployment = String "copy"