module Data.MediaBus.Discontinous
( Discontinous(..)
, _Missing
, _Got
, concealMissing
) where
import Conduit
import Control.Lens
import Control.Parallel.Strategies ( NFData )
import Data.Default
import Data.MediaBus.Ticks
import Data.MediaBus.Payload
import Data.MediaBus.Stream
import GHC.Generics ( Generic )
data Discontinous a = Missing
| Got !a
deriving (Show, Generic)
instance NFData a =>
NFData (Discontinous a)
instance Default (Discontinous a) where
def = Missing
makePrisms ''Discontinous
instance (HasDuration a) =>
HasDuration (Discontinous a) where
getDuration Missing = 0
getDuration (Got !x) = getDuration x
instance HasPayload a =>
HasPayload (Discontinous a) where
type GetPayload (Discontinous a) = GetPayload a
type SetPayload (Discontinous a) b = Discontinous (SetPayload a b)
payload = _Got . payload
concealMissing :: (NFData c, Monad m)
=> c
-> Conduit (Stream i s t p (Discontinous c)) m (Stream i s t p c)
concealMissing conceal =
mapPayloadC' go
where
go (Got !b) = b
go Missing = conceal