module Colorless.Prim
  ( Prim(..)
  ) where

import Data.Aeson
import Data.Word
import Data.Int
import Data.Text (Text)

data Prim
  = Prim'Bool Bool
  | Prim'I8 Int8
  | Prim'I16 Int16
  | Prim'I32 Int32
  | Prim'I64 Int64
  | Prim'U8 Word8
  | Prim'U16 Word16
  | Prim'U32 Word32
  | Prim'U64 Word64
  | Prim'String Text
  deriving (Show, Eq)

instance ToJSON Prim where
  toJSON = \case
    Prim'Bool b -> toJSON b
    Prim'I8 i -> toJSON i
    Prim'I16 i -> toJSON i
    Prim'I32 i -> toJSON i
    Prim'I64 i -> toJSON i
    Prim'U8 u -> toJSON u
    Prim'U16 u -> toJSON u
    Prim'U32 u -> toJSON u
    Prim'U64 u -> toJSON u
    Prim'String s -> toJSON s