33 lines
1021 B
Haskell
33 lines
1021 B
Haskell
|
|
module Encoding.Base62
|
||
|
|
( enc62
|
||
|
|
, dec62
|
||
|
|
) where
|
||
|
|
|
||
|
|
|
||
|
|
import qualified Data.Word.Base62 as B62
|
||
|
|
import Text.Read (readMaybe)
|
||
|
|
import Data.Maybe (fromMaybe)
|
||
|
|
import Data.ByteString.UTF8 as BSU -- from utf8-string
|
||
|
|
import qualified Data.Bytes as Bytes
|
||
|
|
import Data.Bytes.Text.Latin1 as Latin1
|
||
|
|
import qualified Data.ByteString.Char8 as C
|
||
|
|
import qualified Data.Text as T
|
||
|
|
import qualified Data.Text.Encoding as T
|
||
|
|
-- import qualified Data.Text.IO as T
|
||
|
|
|
||
|
|
|
||
|
|
dec62 :: String -> String
|
||
|
|
dec62 input =
|
||
|
|
let decoded = B62.decode128 (Bytes.fromByteString (BSU.fromString input))
|
||
|
|
in fromMaybe "Error decoding Base62.\n" (show <$> decoded)
|
||
|
|
|
||
|
|
stringToInt :: String -> Maybe Integer
|
||
|
|
stringToInt = readMaybe
|
||
|
|
|
||
|
|
enc62 :: String -> String
|
||
|
|
enc62 input =
|
||
|
|
let intValue = fromMaybe (error "Error: Unable to convert input string to integer") (stringToInt input)
|
||
|
|
encoded = B62.encode64 (fromIntegral intValue)
|
||
|
|
encodedText = T.decodeUtf8 (BSU.fromString (Latin1.toString (Bytes.fromByteArray encoded)))
|
||
|
|
in T.unpack encodedText
|