-- | Header schema definition, see: https://github.com/ietf-wg-cellar/ebml-specification/blob/master/specification.markdown#ebml-header-elements
module Codec.EBML.Header where

import Data.Text (Text)

import Codec.EBML.Element
import Codec.EBML.Get
import Codec.EBML.Schema

schemaHeader :: [EBMLSchema]
schemaHeader :: [EBMLSchema]
schemaHeader =
    [ Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
"EBML" EBMLID
0x1A45DFA3 EBMLSchemas -> EBMLElementHeader -> Get EBMLValue
getRoot
    , Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
"DocType" EBMLID
0x4282 (forall a b. a -> b -> a
const EBMLElementHeader -> Get EBMLValue
getText)
    , Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
"Segment" EBMLID
0x18538067 EBMLSchemas -> EBMLElementHeader -> Get EBMLValue
getRoot
    , Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
"Info" EBMLID
0x1549A966 EBMLSchemas -> EBMLElementHeader -> Get EBMLValue
getRoot
    , Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
"Cluster" EBMLID
0x1F43B675 EBMLSchemas -> EBMLElementHeader -> Get EBMLValue
getRoot
    ]
        forall a. Semigroup a => a -> a -> a
<> forall a b. (a -> b) -> [a] -> [b]
map (Text, EBMLID) -> EBMLSchema
fromUints [(Text, EBMLID)]
uints

fromUints :: (Text, EBMLID) -> EBMLSchema
fromUints :: (Text, EBMLID) -> EBMLSchema
fromUints (Text
n, EBMLID
i) = Text
-> EBMLID
-> (EBMLSchemas -> EBMLElementHeader -> Get EBMLValue)
-> EBMLSchema
EBMLSchema Text
n EBMLID
i (forall a b. a -> b -> a
const EBMLElementHeader -> Get EBMLValue
getUnsignedInteger)

uints :: [(Text, EBMLID)]
uints :: [(Text, EBMLID)]
uints =
    [ (Text
"EBMLVersion", EBMLID
0x4286)
    , (Text
"EBMLReadVersion", EBMLID
0x42F7)
    , (Text
"EBMLMaxIDLength", EBMLID
0x42F2)
    , (Text
"EBMLMaxSizeLength", EBMLID
0x42F3)
    , (Text
"DocTypeVersion", EBMLID
0x4287)
    , (Text
"DocTypeReadVersion", EBMLID
0x4285)
    , (Text
"TimestampScale", EBMLID
0x2AD7B1)
    , (Text
"Timestamp", EBMLID
0xE7)
    ]