module Data.CQRS.Serialize
       ( decode'
       , encode
       ) where

import Data.ByteString (ByteString)
import Data.SafeCopy (SafeCopy, safeGet, safePut)
import Data.Serialize (runGet, runPut)

-- | Decode a serialized value irrefutably.
decode' :: SafeCopy e => ByteString -> e
decode' = either error id . runGet safeGet

-- | Encode a value.
encode :: SafeCopy e => e -> ByteString
encode = runPut . safePut