{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE TemplateHaskell #-} module Parquet.ParquetObject where import Control.Lens import Data.Binary (Binary(..)) import Codec.Serialise (Serialise) import GHC.Generics (Generic) import qualified Data.ByteString as BS import qualified Data.HashMap.Strict as HM import qualified Data.Text as T import Data.Int (Int64) newtype ParquetObject = MkParquetObject (HM.HashMap T.Text ParquetValue) deriving (Eq, Show, Generic, Serialise) instance Semigroup ParquetObject where MkParquetObject hm1 <> MkParquetObject hm2 = MkParquetObject (hm1 <> hm2) instance Monoid ParquetObject where mempty = MkParquetObject mempty instance Binary ParquetObject where put (MkParquetObject hm) = put (HM.toList hm) get = MkParquetObject . HM.fromList <$> get data ParquetValue = ParquetObject !ParquetObject | ParquetInt !Int64 | ParquetString !BS.ByteString | ParquetNull deriving (Eq, Show, Generic, Binary, Serialise) makeLenses ''ParquetObject makePrisms ''ParquetObject makeLenses ''ParquetValue makePrisms ''ParquetValue