base16-0.3.0.0: Fast RFC 4648-compliant Base16 encoding

Copyright(c) 2020 Emily Pillmore
LicenseBSD-style
MaintainerEmily Pillmore <emilypi@cohomolo.gy>
Stabilitystable
Portabilitynon-portable
Safe HaskellTrustworthy
LanguageHaskell2010

Data.Text.Short.Encoding.Base16

Description

This module contains ShortText-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

Documentation

encodeBase16 :: ShortText -> ShortText Source #

Encode a ShortText value in Base16 with padding.

See: RFC-4648 section 8

Examples:

>>> encodeBase16 "Sun"
"53756e"

decodeBase16 :: ShortText -> Either Text ShortText Source #

Decode a Base16-encoded ShortText value.

See: RFC-4648 section 8

Examples:

>>> decodeBase16 "53756e"
Right "Sun"
>>> decodeBase16 "6x"
Left "invalid character at offset: 1"

decodeBase16With Source #

Arguments

:: (ShortByteString -> Either err ShortText)

convert a bytestring to text (e.g. decodeUtf8')

-> ShortByteString

Input to decode

-> Either (Base16Error err) ShortText 

Attempt to decode a ShortText value as Base16, converting from ByteString to ShortText according to some encoding function. In practice, This is something like decodeUtf8', which may produce an error.

See: RFC-4648 section 8

Example:

decodeBase16With (fmap fromText . decodeUtf8' . fromShort)
  :: ShortByteString -> Either (Base16Error UnicodeException) ShortText

Since: 0.3.0.0

decodeBase16Lenient :: ShortText -> ShortText Source #

Decode a Base16-encoded ShortText value leniently, using a strategy that never fails, catching unicode exceptions raised in the process of converting to text values.

N.B.: this is not RFC 4648-compliant.

Examples:

>>> decodeBase16Lenient "53756e"
"Sun"
>>> decodeBase16Lenient "6x6x"
"f"

isBase16 :: ShortText -> Bool Source #

Tell whether a ShortText value is Base16-encoded.

Examples:

>>> isBase16 "666f6"
False
>>> isBase16 "666f"
True

isValidBase16 :: ShortText -> Bool Source #

Tell whether a ShortText 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 ShortText value, use isBase16.

Examples:

>>> isValidBase16 "666f+/6"
False
>>> isValidBase16 "666f6"
True