{-# LANGUAGE OverloadedStrings #-}

-- | All iCalendar types.

module ICal.Types where

import Data.Text (Text)
import Data.Aeson (ToJSON(..),object,(.=))

-- | Tree for representing iCal file.
data Object
  = Property !Text -- name
             !Text -- value
  | Object !Text -- name
           ![Object] -- values
  deriving (Show)

instance ToJSON Object where
  toJSON (Object name values) = object ["name" .= name,"values" .= values]
  toJSON (Property key value) = object ["key" .= key,"value" .= value]

-- | An iCalendar line.
data Line
  = Begin !Text -- object name
  | End !Text -- object name
  | Pair !Text -- name
         !Text -- value
  deriving (Show)