Copyright | (c) 2020 Emily Pillmore |
---|---|
License | BSD-style |
Maintainer | Emily Pillmore <emilypi@cohomolo.gy> |
Stability | stable |
Portability | non-portable |
Safe Haskell | Safe |
Language | Haskell2010 |
This module contains Text
-valued combinators for
implementing the RFC 4648 specification of the Base16
encoding format. This includes lenient decoding variants, as well as
internal and external validation for canonicity.
Synopsis
- encodeBase16 :: Text -> Text
- decodeBase16 :: Text -> Either Text Text
- decodeBase16With :: (ByteString -> Either err Text) -> ByteString -> Either (Base16Error err) Text
- decodeBase16Lenient :: Text -> Text
- isBase16 :: Text -> Bool
- isValidBase16 :: Text -> Bool
Documentation
encodeBase16 :: Text -> Text Source #
Encode a lazy Text
value in Base16 with padding.
See: RFC-4648 section 8
Examples:
>>>
encodeBase16 "Sun"
"53756e"
decodeBase16 :: Text -> Either Text Text Source #
Decode a Base16-encoded lazy Text
value.
See: RFC-4648 section 8
Examples:
>>>
decodeBase16 "53756e"
Right "Sun"
>>>
decodeBase16 "6x"
Left "invalid character at offset: 1"
:: (ByteString -> Either err Text) | convert a bytestring to text (e.g. |
-> ByteString | Input to decode |
-> Either (Base16Error err) Text |
Attempt to decode a lazy Text
value as Base16, converting from
ByteString
to Text
according to some encoding function. In practice,
This is something like decodeUtf8'
, which may produce an error.
See: RFC-4648 section 8
decodeBase16With
decodeUtf8'
::ByteString
->Either
(Base16Error
UnicodeException
)Text
Since: 0.3.0.0
decodeBase16Lenient :: Text -> Text Source #
Decode a Base16-encoded lazy Text
value leniently, using a
strategy that never fails.
Warning: in the conversion to unicode text, exceptions may be thrown.
Please use decodeBase16'
if you are unsure if you are working with
base16-encoded values, or if you expect garbage.
N.B.: this is not RFC 4648-compliant. It may give you garbage if you're not careful!
Examples:
>>>
decodeBase16Lenient "53756e"
"Sun"
>>>
decodeBase16Lenient "6x6x"
"f"
isBase16 :: Text -> Bool Source #
Tell whether a lazy Text
value is Base16-encoded.
Examples:
>>>
isBase16 "666f6"
False
>>>
isBase16 "666f"
True
isValidBase16 :: Text -> Bool Source #
Tell whether a lazy Text
value is a valid Base16 format.
This will not tell you whether or not this is a correct Base16 representation,
only that it conforms to the correct shape. To check whether it is a true
Base16 encoded Text
value, use isBase16
.
Examples:
>>>
isValidBase16 "666f+/6"
False
>>>
isValidBase16 "666f6"
True