parquet-hs-0.1.0.0: src/Parquet/ParquetObject.hs
{-# 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