packages feed

mfmts-1.0.0.0: multibase/MultiFormats/MultiBaseSystems.hs

-- | Module      : MultiFormats.MultiBaseSystems
--   Description : Provides default instances of multibase
--   Copyright   : Zoey McBride (c) 2026
--   License     : AGPL-3.0-or-later
--   Maintainer  : zoeymcbride@mailbox.org
--   Stability   : experimental
module MultiFormats.MultiBaseSystems
  ( base2,
    base10,
    base16lower,
    base16upper,
    base32lower,
    base32lowerNP,
    base32upper,
    base32upperNP,
    base32hexlower,
    base32hexlowerNP,
    base32hexupper,
    base32hexupperNP,
    base58btc,
    base64,
    base64NP,
    base64url,
    base64urlNP,
  )
where

import Data.Maybe (fromJust)
import MultiFormats.MultiBase

-- | Unwraps Maybe from multibaseSystems lookup for implementing MultiBase from
-- Char.
multibasePrefix :: Char -> MultiBase
multibasePrefix = fromJust . resolvePrefix

-- | Binary has prefix '0'.
base2 :: MultiBase
base2 = multibasePrefix '0'

-- | Decimal has prefix '9'.
base10 :: MultiBase
base10 = multibasePrefix '9'

-- | Hex-lower has prefix 'f'.
base16lower :: MultiBase
base16lower = multibasePrefix 'f'

-- | Hex-upper has prefix 'F'.
base16upper :: MultiBase
base16upper = multibasePrefix 'F'

-- | base32lower (no pad) has prefix 'b'.
base32lowerNP :: MultiBase
base32lowerNP = multibasePrefix 'b'

-- | base32uppper (no pad) has prefix 'B'.
base32upperNP :: MultiBase
base32upperNP = multibasePrefix 'B'

-- | base32lower (with pad) has prefix 'c'.
base32lower :: MultiBase
base32lower = multibasePrefix 'c'

-- | base32upper (with pad) has prefix 'C'.
base32upper :: MultiBase
base32upper = multibasePrefix 'C'

-- | Hex-base32lower (no pad) has prefix 'v'.
base32hexlowerNP :: MultiBase
base32hexlowerNP = multibasePrefix 'v'

-- | Hex-base32upper (no pad) has prefix 'V'.
base32hexupperNP :: MultiBase
base32hexupperNP = multibasePrefix 'V'

-- | Hex-base32lower (with pad) has prefix 't'.
base32hexlower :: MultiBase
base32hexlower = multibasePrefix 't'

-- | Hex-base32upper (with pad) has prefix 'T'.
base32hexupper :: MultiBase
base32hexupper = multibasePrefix 'T'

-- | Bitcoin base58 has prefix 'z'.
base58btc :: MultiBase
base58btc = multibasePrefix 'z'

-- | base64 (no pad) has prefix 'm'.
base64NP :: MultiBase
base64NP = multibasePrefix 'm'

-- | base64 (with pad) has prefix 'M'.
base64 :: MultiBase
base64 = multibasePrefix 'M'

-- | base64url (no pad) has prefix 'u'.
base64urlNP :: MultiBase
base64urlNP = multibasePrefix 'u'

-- | base64url (with pad) has prefix 'U'.
base64url :: MultiBase
base64url = multibasePrefix 'U'