packages feed

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'