-----------------------------------------------------------------------------
-- |
-- Module      :  OpenAFP.Types.View
-- Copyright   :  (c) Audrey Tang 2004, 2006
-- License     :  BSD-style
-- 
-- Maintainer  :  audreyt@audreyt.org
-- Stability   :  experimental
-- Portability :  non-portable (GHC-only)
--
-- Concrete data views on Chunks and Records.
--
-----------------------------------------------------------------------------

module OpenAFP.Types.View where
import OpenAFP.Types.Buffer
import OpenAFP.Internals
import Data.ByteString

type ChunksType = TypeRep
type RecordType = TypeRep
type NumberType = TypeRep
type NStrType   = TypeRep
type StringType = TypeRep
type DataType   = TypeRep
type FieldLabel = ByteString

data ViewRecord = ViewRecord
    { vr_type   :: !RecordType
    , vr_field  :: ![ViewField]
    }
    deriving (Show, Typeable)

data ViewField = ViewField
    { vf_label   :: !FieldLabel
    , vf_content :: !ViewContent
    }
    deriving (Show, Typeable)

data ViewContent
    = ViewNumber { vc_type :: !NumberType, vc_number :: !Int }
    | ViewString { vc_type :: !StringType, vc_string :: !ByteString }
    | ViewNStr   { vc_type :: !NStrType,   vc_nstr   :: !ByteString }
    | ViewChunks { vc_type :: !ChunksType, vc_chunks :: ![ViewRecord] }
    | ViewData   { vc_type :: !DataType,   vc_data   :: ![ViewRecord] }
    deriving (Show, Typeable)