raaz-0.0.2: Raaz/Core/Encode.hs
module Raaz.Core.Encode
( -- * Encoding of binary data.
-- $encodable$
Encodable(..)
, Format(..)
, encode, decode, translate, unsafeDecode
-- ** The base 16 encoding format
, Base16
, fromBase16, showBase16
-- ** Other binary formats.
, Base64
) where
import Raaz.Core.Encode.Internal
import Raaz.Core.Encode.Base16
import Raaz.Core.Encode.Base64
-- $encodable$
--
-- Often one wants to represent cryptographic hashes, secret keys or
-- just binary data into various enocoding formats like base64,
-- hexadecimal etc. This module gives a generic interface for all such
-- operations. There are two main classes that capture the essence of
-- encoding.
--
-- [`Format`] Each encoding supported by this module is an instance of
-- this class. For printing and for easy inclusion in source code
-- appropriate instances of `Show` and `Data.String.IsString` is
-- provided for these types.
--
-- [`Encodable`] Instances of this class are those that can be encoded
-- into any of the available formats. Actual encoding and decoding
-- of elements of this class can be done by the combinators
-- `encode` and `decode`
--
-- The raaz library exposes many instances of `Format` which are all
-- some form of encoding of binary data.
--
-- | Encode in a given format.
encode :: (Encodable a, Format fmt) => a -> fmt
encode = encodeByteString . toByteString
-- | Decode from a given format. It results in Nothing if there is a
-- parse error.
decode :: (Format fmt, Encodable a) => fmt -> Maybe a
decode = fromByteString . decodeFormat
-- | The unsafe version of `decode`.
unsafeDecode :: (Format fmt, Encodable a) => fmt -> a
unsafeDecode = unsafeFromByteString . decodeFormat
-- | Translate from one format to another.
translate :: (Format fmt1, Format fmt2) => fmt1 -> fmt2
translate = encodeByteString . decodeFormat