module ID3.Parser.ExtHeader
(parseExtHeader)
where
import ID3.Parser.General
import ID3.Type.ExtHeader
import Data.Accessor
import Data.Word (Word8)
parseExtHeader :: TagParser ID3ExtHeader
parseExtHeader = do
s <- parseSize 4 True `err` "ext header size"
word8 0x01 `err` "ext header pre-flags"
[b,c,d] <- parseFlags_ [2,3,4] `err` "ext header flags"
bb <- if b then parseB else return False
cc <- if c then parseC else return []
dd <- if d then parseD else return []
return $ initID3ExtHeader [ extSize^=s
, extFlags^=(initExtFlags [ isUpdate^=bb
, crc^=cc
, restrictions^=dd
])
]
parseB :: TagParser Bool
parseB = do
word8 0x00
return True
parseC :: TagParser [Word8]
parseC = do
word8 0x05
count 5 anyWord8
parseD :: TagParser [Bool]
parseD = do
word8 0x01
parseFlags_ [1..8]