{-# LANGUAGE OverloadedStrings #-}

{- |
Module      :  $Header$
Description :  ADT describing a project.
Author      :  Nils 'bash0r' Jonsson
Copyright   :  (c) 2015 Nils 'bash0r' Jonsson
License     :  MIT

Maintainer  :  aka.bash0r@gmail.com
Stability   :  unstable
Portability :  non-portable (Portability is untested.)

A simple ADT describing a project.
-}
module Data.Model.Project
( Project (..)
) where

import Data.Aeson
import Data.Model.Utility


-- | A representation of a project.
data Project
    -- | A basic representation of a project.    
    = Project ProjectName ProjectRoot [ProjectName]
    deriving (Show, Eq)


instance ToJSON Project where
    toJSON (Project pName pDirectory pDependencies) =
      object [ "name"         .= pName
             , "root"         .= pDirectory
             , "dependencies" .= pDependencies
             ]

instance FromJSON Project where
    parseJSON = withObject "Project Description" $ \o ->
      Project <$> o .: "name"
              <*> o .: "root"
              <*> o .: "dependencies"