serokell-util-0.1.1: src/Serokell/Util/Binary.hs
-- | Utilities for @Data.Binary@.
module Serokell.Util.Binary
( decodeFull
) where
import Data.Binary (Binary, decodeOrFail)
import qualified Data.ByteString.Lazy as BSL
import Data.ByteString.Lazy (ByteString)
-- | Like 'decode', but ensures that the whole input has been consumed.
decodeFull :: Binary a => ByteString -> Either String a
decodeFull bs = case decodeOrFail bs of
Left (_, _, err) -> Left ("decodeFull: " ++ err)
Right (unconsumed, _, a)
| BSL.null unconsumed -> Right a
| otherwise -> Left "decodeFull: unconsumed input"