module Blaze.ByteString.Builder.ZoomCache.Internal (
fromDataRateType
, fromGlobal
, fromSummary
, fromTrackNo
, fromTrackType
) where
import Blaze.ByteString.Builder
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Char8 as LC
import Data.Monoid
import Blaze.ByteString.Builder.ZoomCache
import Data.ZoomCache.Common
import Data.ZoomCache.Format
import Data.ZoomCache.Types
fromDataRateType :: DataRateType -> Builder
fromDataRateType ConstantDR = fromInt16be 0
fromDataRateType VariableDR = fromInt16be 1
fromGlobal :: Global -> Builder
fromGlobal Global{..} = mconcat
[ fromLazyByteString globalHeader
, mconcat $
[ fromVersion version
, fromIntegral32be noTracks
, fromRational64 presentationTime
, fromRational64 baseTime
]
, fromLazyByteString $ LC.pack (replicate 20 '\0')
]
fromSummary :: ZoomWritable a => Summary a -> Builder
fromSummary s@Summary{..} = mconcat [ fromSummaryHeader s, l, d]
where
d = fromSummaryData summaryData
l = fromIntegral32be . L.length . toLazyByteString $ d
fromSummaryHeader :: Summary a -> Builder
fromSummaryHeader s = mconcat
[ fromLazyByteString summaryHeader
, fromIntegral32be . summaryTrack $ s
, fromIntegral32be . summaryLevel $ s
, fromTimeStamp . summaryEntryTime $ s
, fromTimeStamp . summaryExitTime $ s
]
fromTrackNo :: TrackNo -> Builder
fromTrackNo = fromInt32be . fromIntegral
fromTrackType :: TrackType -> Builder
fromTrackType ZDouble = fromLazyByteString trackTypeDouble
fromTrackType ZInt = fromLazyByteString trackTypeInt
fromVersion :: Version -> Builder
fromVersion (Version vMaj vMin) = mconcat
[ fromInt16be . fromIntegral $ vMaj
, fromInt16be . fromIntegral $ vMin
]