ebml-0.1.0.0: src/Codec/EBML/Schema.hs
module Codec.EBML.Schema where
import Data.Binary.Get (Get)
import Data.Map.Strict (Map)
import Data.Map.Strict qualified as Map
import Data.Text (Text)
import Codec.EBML.Element
{- | EBML schema definition.
Note that this is missing:
- min/max occurrence constraint.
- default value.
- element path.
-}
data EBMLSchema = EBMLSchema
{ name :: Text
-- ^ The element name.
, eid :: EBMLID
-- ^ The element id.
, decode :: EBMLSchemas -> EBMLElementHeader -> Get EBMLValue
-- ^ How to decode the element value.
}
newtype EBMLSchemas = EBMLSchemas (Map EBMLID EBMLSchema)
-- | Combine a list of schema for decoder.
compileSchemas :: [EBMLSchema] -> EBMLSchemas
compileSchemas = EBMLSchemas . Map.fromList . map toKV
where
toKV schema = (schema.eid, schema)
lookupSchema :: EBMLID -> EBMLSchemas -> Maybe EBMLSchema
lookupSchema eid (EBMLSchemas schemas) = Map.lookup eid schemas