packages feed

mfmts-1.2.0.0: multibase/MultiFormats/MultiBase.hs

-- | Module      : MultiFormats.MultiBase
--   Description : Multibase encoders and decoders for ShortByteString
--   Copyright   : Zoey McBride (c) 2026
--   License     : AGPL-3.0-or-later
--   Maintainer  : zoeymcbride@mailbox.org
--   Stability   : experimental
module MultiFormats.MultiBase
  ( BaseSystem (encoder, decoder),
    Encoder,
    Decoder,
    ByteStr,
  )
where

import Data.BaseSystems.DigitTranscoder qualified as DXC
import Data.ByteString.Short (ShortByteString)
import Data.Text (Text)
import MultiFormats.MultiBase.DigitTranscoder (MultiBase)

-- | Sets the bytestring type to use in this file.
type ByteStr = ShortByteString

-- | Alias for curried encoder method.
type Encoder = ByteStr -> Text

-- | Alias for curried decoder method.
type Decoder = Text -> Maybe ByteStr

-- | Configures the BaseSystem for this file's ByteType.
class BaseSystem a where
  encoder :: a -> ByteStr -> Text
  decoder :: a -> Text -> Maybe ByteStr

-- | Demotes the DigitTranscoder for MultiBase to BaseSystem transcoders.
instance BaseSystem (MultiBase ByteStr) where
  encoder = DXC.digitEncoder
  decoder = DXC.digitDecoder