karps-0.1.9.0: src/Spark/Core/Internal/RowStructures.hs
module Spark.Core.Internal.RowStructures where
import Data.Aeson
import Data.Vector(Vector)
import qualified Data.Text as T
-- | The basic representation of one row of data. This is a standard type that comes out of the
-- SQL engine in Spark.
-- | An element in a Row object.
-- All objects manipulated by the Spark framework are assumed to
-- be convertible to cells.
--
-- This is usually handled by generic transforms.
data Cell =
Empty -- To represent maybe
| IntElement !Int
| DoubleElement !Double
| StringElement !T.Text
| BoolElement !Bool
| RowArray !(Vector Cell) deriving (Show, Eq)
-- | A Row of data: the basic data structure to transport information
-- TODO rename to rowCells
data Row = Row {
cells :: !(Vector Cell)
} deriving (Show, Eq)
-- AESON INSTANCES
-- TODO(kps) add some workaround to account for the restriction of
-- JSON types:
-- int32 -> int32
-- double -> double
-- weird double -> string?
-- long/bigint -> string?
-- | Cell
instance ToJSON Cell where
toJSON Empty = Null
toJSON (DoubleElement d) = toJSON d
toJSON (IntElement i) = toJSON i
toJSON (BoolElement b) = toJSON b
toJSON (StringElement s) = toJSON s
toJSON (RowArray arr) = toJSON arr
-- | Row
instance ToJSON Row where
toJSON (Row x) = toJSON x