packages feed

parquet-haskell-0.1.0.0: src/Parquet/Types/PageHeader.hs

module Parquet.Types.PageHeader
  ( -- * Type definitions
    DataPageHeader (..),
    DictionaryPageHeader (..),
    PageHeader (..),

    -- * Internal type definitions
    IndexPageHeader (..),

    -- * Unused type definitions
    DataPageHeaderV2 (..),
  )
where

------------------------------------------------------------------------------

import Parquet.Prelude
import Parquet.Types.Enums
import Parquet.Types.Primitives
import Pinch

------------------------------------------------------------------------------
data DataPageHeader = DataPageHeader
  { _DataPageHeader_num_values :: Field 1 Int32,
    _DataPageHeader_encoding :: Field 2 Encoding,
    _DataPageHeader_definition_level_encoding :: Field 3 Encoding,
    _DataPageHeader_repetition_level_encoding :: Field 4 Encoding,
    _DataPageHeader_statistics :: Field 5 (Maybe Statistics)
  }
  deriving (Show, Eq, Generic, Pinchable, Binary)

------------------------------------------------------------------------------
data DataPageHeaderV2 = DataPageHeaderV2
  { _DataPageHeaderV2_num_values :: Field 1 Int32,
    _DataPageHeaderV2_num_nulls :: Field 2 Int32,
    _DataPageHeaderV2_num_rows :: Field 3 Int32,
    _DataPageHeaderV2_encoding :: Field 4 Encoding,
    _DataPageHeaderV2_definition_levels_byte_length :: Field 5 Int32,
    _DataPageHeaderV2_repetition_levels_byte_length :: Field 6 Int32,
    _DataPageHeaderV2_is_compressed :: Field 7 (Maybe Bool),
    _DataPageHeaderV2_statistics :: Field 8 (Maybe Statistics)
  }
  deriving (Show, Eq, Generic, Pinchable, Binary)

------------------------------------------------------------------------------
data DictionaryPageHeader = DictionaryPageHeader
  { _DictionaryPageHeader_num_values :: Field 1 Int32,
    _DictionaryPageHeader_encoding :: Field 2 Encoding,
    _DictionaryPageHeader_is_sorted :: Field 3 (Maybe Bool)
  }
  deriving (Show, Eq, Generic, Pinchable, Binary)

------------------------------------------------------------------------------
data IndexPageHeader = IndexPageHeader
  deriving (Show, Eq, Generic, Binary)

instance Pinchable IndexPageHeader where
  type Tag IndexPageHeader = TStruct
  pinch _ = struct []
  unpinch _ = pure IndexPageHeader

------------------------------------------------------------------------------
data PageHeader = PageHeader
  { _PageHeader_type :: Field 1 PageType,
    _PageHeader_uncompressed_page_size :: Field 2 Int32,
    _PageHeader_compressed_page_size :: Field 3 Int32,
    _PageHeader_crc :: Field 4 (Maybe Int32),
    _PageHeader_data_page_header :: Field 5 (Maybe DataPageHeader),
    _PageHeader_index_page_header :: Field 6 (Maybe IndexPageHeader),
    _PageHeader_dictionary_page_header :: Field 7 (Maybe DictionaryPageHeader),
    _PageHeader_data_page_header_v2 :: Field 8 (Maybe DataPageHeaderV2)
  }
  deriving (Show, Eq, Generic, Pinchable, Binary)