mfmts-1.2.0.0: multibase/MultiFormats/MultiBase/DigitSystems.hs
-- | Module : MultiFormats.MultiBase.DigitSystems
-- Description : Parameters to set multibase encoder/decoder basesystem
-- Copyright : Zoey McBride (c) 2026
-- License : AGPL-3.0-or-later
-- Maintainer : zoeymcbride@mailbox.org
-- Stability : experimental
module MultiFormats.MultiBase.DigitSystems
( multibase2,
multibase10,
multibase16lower,
multibase16upper,
multibase32lower,
multibase32lowerNP,
multibase32upper,
multibase32upperNP,
multibase32hexlower,
multibase32hexlowerNP,
multibase32hexupper,
multibase32hexupperNP,
multibase58btc,
multibase64,
multibase64NP,
multibase64url,
multibase64urlNP,
)
where
import Data.Maybe (fromJust)
import Data.XCodec.BinaryTranscoder (BinaryTranscoder)
import MultiFormats.MultiBase.DigitTranscoder (MultiBase, resolvePrefix)
-- | Creates the multibase from Char, and crashes if Char is an invalid prefix.
mk :: (BinaryTranscoder bxc) => Char -> MultiBase bxc
mk = fromJust . resolvePrefix
-- | Binary has prefix "0".
multibase2 :: (BinaryTranscoder bxc) => MultiBase bxc
multibase2 = mk '0'
-- | Decimal has prefix "9".
multibase10 :: (BinaryTranscoder bxc) => MultiBase bxc
multibase10 = mk '9'
-- | Hex-lower has prefix "f".
multibase16lower :: (BinaryTranscoder bxc) => MultiBase bxc
multibase16lower = mk 'f'
-- | Hex-upper has prefix "F".
multibase16upper :: (BinaryTranscoder bxc) => MultiBase bxc
multibase16upper = mk 'F'
-- | base32lower (no pad) has prefix "b".
multibase32lowerNP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32lowerNP = mk 'b'
-- | base32uppper (no pad) has prefix "B".
multibase32upperNP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32upperNP = mk 'B'
-- | base32lower (with pad) has prefix "c".
multibase32lower :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32lower = mk 'c'
-- | base32upper (with pad) has prefix "C".
multibase32upper :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32upper = mk 'C'
-- | Hex-base32lower (no pad) has prefix "v".
multibase32hexlowerNP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32hexlowerNP = mk 'v'
-- | Hex-base32upper (no pad) has prefix "V".
multibase32hexupperNP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32hexupperNP = mk 'V'
-- | Hex-base32lower (with pad) has prefix "t".
multibase32hexlower :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32hexlower = mk 't'
-- | Hex-base32upper (with pad) has prefix "T".
multibase32hexupper :: (BinaryTranscoder bxc) => MultiBase bxc
multibase32hexupper = mk 'T'
-- | Bitcoin base58 has prefix "z".
multibase58btc :: (BinaryTranscoder bxc) => MultiBase bxc
multibase58btc = mk 'z'
-- | base64 (no pad) has prefix "m".
multibase64NP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase64NP = mk 'm'
-- | base64 (with pad) has prefix "M".
multibase64 :: (BinaryTranscoder bxc) => MultiBase bxc
multibase64 = mk 'M'
-- | base64url (no pad) has prefix "u".
multibase64urlNP :: (BinaryTranscoder bxc) => MultiBase bxc
multibase64urlNP = mk 'u'
-- | base64url (with pad) has prefix "U".
multibase64url :: (BinaryTranscoder bxc) => MultiBase bxc
multibase64url = mk 'U'