packages feed

binrep-0.2.0: src/Binrep/Example/Wav.hs

module Binrep.Example.Wav where

import Binrep
import Binrep.Generic
import Binrep.Generic qualified as BR
import Binrep.Type.Common ( Endianness(..) )
import Binrep.Type.Int
import Binrep.Type.Magic

import GHC.Generics ( Generic )
import Data.Data ( Data )

type E = 'LE
type W32 = I 'U 'I4 E
type W16 = I 'U 'I2 E

brCfgNoSum :: BR.Cfg (I 'U 'I1 'LE)
brCfgNoSum = BR.Cfg { BR.cSumTag = undefined }

data WavHeader = WavHeader
  { wavHeaderMagic :: Magic "RIFF"
  , wavHeaderChunkSize :: W32 -- file size - 8
  , wavHeaderFmt :: Magic "WAVE"
  , wavHeaderFmtChunkMarker :: Magic "fmt "
  , wavHeaderFmtType :: W16
  , wavHeaderChannels :: W16
  } deriving stock (Generic, Data, Show, Eq)

instance BLen WavHeader where blen = blenGeneric brCfgNoSum
instance Put  WavHeader where put  = putGeneric  brCfgNoSum
instance Get  WavHeader where get  = getGeneric  brCfgNoSum