more error handling for decoding functions
This commit is contained in:
parent
6b950f6738
commit
6800552f65
51
Main.hs
51
Main.hs
|
@ -13,6 +13,7 @@ import TextShow.Data.Integral (showbBin, showbOct)
|
|||
import Text.Ascii (fromBinDigit, fromOctDigit)
|
||||
import Codec.CBOR.Magic (intToWord64)
|
||||
import qualified Data.Either.Unwrap as U
|
||||
import Data.Bytes.Text.Latin1 as Latin1
|
||||
import qualified Codec.Binary.Base91 as B91
|
||||
import qualified Codec.Binary.Base85 as B85
|
||||
import qualified Codec.Binary.Base64 as B64
|
||||
|
@ -31,6 +32,7 @@ import qualified Data.Bytes as Bytes
|
|||
import qualified Data.Bytes.Text.Ascii as ASCII
|
||||
import Data.Bytes.Get (getWord64host)
|
||||
import Data.ByteString.UTF8 as BSU -- from utf8-string
|
||||
-- import Data.ByteString (singleton)
|
||||
import qualified Data.ByteString.Char8 as C
|
||||
|
||||
data Based = Decode {
|
||||
|
@ -89,13 +91,13 @@ data Based = Decode {
|
|||
encodeToBase64 :: C.ByteString -> Either String C.ByteString
|
||||
encodeToBase64 bs =
|
||||
case B64.encode bs of
|
||||
encoded | C.null encoded -> Left "Failed to encode base64."
|
||||
encoded | C.null encoded -> Left "Failed to encode Base64.\n"
|
||||
| otherwise -> Right encoded
|
||||
|
||||
decodeFromBase64 :: C.ByteString -> Either String C.ByteString
|
||||
decodeFromBase64 bs =
|
||||
case B64L.decodeLenient bs of
|
||||
decoded | C.null decoded -> Left "Failed to decode from base64."
|
||||
decoded | C.null decoded -> Left "Failed to decode from Base64.\n"
|
||||
| otherwise -> Right decoded
|
||||
-- | otherwise -> Right (BSU.toString decoded)
|
||||
-- Left err -> Left $ "Failed to decode from base64: " ++ err
|
||||
|
@ -114,6 +116,10 @@ octToInt (x : xs) = x + 8 * octToInt xs
|
|||
|
||||
dec91 :: String -> String
|
||||
dec91 = C.unpack . B91.decode
|
||||
-- dec91 input =
|
||||
-- case singleton . B91.decode input of
|
||||
-- Right decoded -> C.unpack decoded
|
||||
-- Left _ -> "Error decoding Base91.\n"
|
||||
|
||||
enc91 :: String -> String
|
||||
enc91 = B91.encode . BSU.fromString
|
||||
|
@ -121,10 +127,9 @@ enc91 = B91.encode . BSU.fromString
|
|||
-- dec85 = C.unpack . U.fromRight . B85.decode . BSU.fromString
|
||||
dec85 :: String -> String
|
||||
dec85 input =
|
||||
let decoded = B85.decode (BSU.fromString input)
|
||||
in case decoded of
|
||||
case B85.decode (BSU.fromString input) of
|
||||
Right decodedStr -> C.unpack decodedStr
|
||||
Left (decodedStr, _) -> C.unpack decodedStr
|
||||
Left _ -> "Error decoding Base85.\n"
|
||||
|
||||
enc85 :: String -> String
|
||||
enc85 = C.unpack . B85.encode . BSU.fromString
|
||||
|
@ -144,27 +149,33 @@ enc64 input =
|
|||
Left errMsg -> "Error: " ++ errMsg
|
||||
|
||||
dec64url :: String -> String
|
||||
dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString
|
||||
-- dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString
|
||||
dec64url input =
|
||||
case B64.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding Base64 for URLs.\n"
|
||||
|
||||
enc64url :: String -> String
|
||||
enc64url = C.unpack . B64U.encode . BSU.fromString
|
||||
|
||||
|
||||
decurl :: String -> String
|
||||
decurl = HB.urlDecode
|
||||
|
||||
encurl :: String -> String
|
||||
encurl = HB.urlEncode
|
||||
|
||||
dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString)
|
||||
enc62 = C.unpack . BSU.fromString. Bytes.toLatinString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt)))
|
||||
dec62 :: String -> String
|
||||
-- dec62 = show . fromJust . B62.decode128 . (Bytes.fromByteString . BSU.fromString)
|
||||
dec62 input =
|
||||
maybe "Error decoding Base62.\n" show (B62.decode128 (Bytes.fromByteString (BSU.fromString input)))
|
||||
|
||||
enc62 :: String -> String
|
||||
enc62 = C.unpack . BSU.fromString. Latin1.toString . (Bytes.fromByteArray . ( B62.encode64 . (intToWord64 . decimalStringToInt)))
|
||||
|
||||
dec58 :: String -> String
|
||||
-- dec58 = C.unpack . fromJust . B58.decodeBase58 . pack
|
||||
dec58 input =
|
||||
case B58.decodeBase58 (pack input) of
|
||||
Just decoded -> (C.unpack decoded)
|
||||
Nothing -> "Error decoding Base58"
|
||||
maybe "Error decoding Base58.\n" C.unpack (B58.decodeBase58 (pack input))
|
||||
|
||||
enc58 :: String -> String
|
||||
enc58 = unpack . B58.encodeBase58 . BSU.fromString
|
||||
|
@ -174,7 +185,7 @@ dec32 :: String -> String
|
|||
dec32 input =
|
||||
case B32.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding Base32"
|
||||
Left _ -> "Error decoding Base32.\n"
|
||||
|
||||
enc32 :: String -> String
|
||||
enc32 = C.unpack . B32.encode . BSU.fromString
|
||||
|
@ -184,11 +195,17 @@ dec16 :: String -> String
|
|||
dec16 input =
|
||||
case B16.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding Base16"
|
||||
Left _ -> "Error decoding Base16.\n"
|
||||
|
||||
enc16 :: String -> String
|
||||
enc16 = C.unpack . B16.encode . BSU.fromString
|
||||
|
||||
dec10:: String -> String
|
||||
dec10 = show . hexStringToInt
|
||||
|
||||
enc10 :: String -> String
|
||||
enc10 = C.unpack . BSU.fromString . intToHexString . decimalStringToInt -- Depending on what you want, do enc10 = show . map ord
|
||||
|
||||
dec8 = C.unpack . encodeUtf8 . toText . showbOct . hexStringToInt
|
||||
enc8 = C.unpack . BSU.fromString . intToHexString . octToInt . (reverse . (map fromJust . (map fromOctDigit)))
|
||||
dec2 = C.unpack . encodeUtf8 . toText . showbBin . hexStringToInt
|
||||
|
@ -199,7 +216,7 @@ decqp :: String -> String
|
|||
decqp input =
|
||||
case QP.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding QP"
|
||||
Left _ -> "Error decoding QP.\n"
|
||||
|
||||
encqp :: String -> String
|
||||
encqp = C.unpack . QP.encode . BSU.fromString
|
||||
|
@ -209,7 +226,7 @@ decuu :: String -> String
|
|||
decuu input =
|
||||
case UU.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding UU."
|
||||
Left _ -> "Error decoding UU.\n"
|
||||
|
||||
encuu :: String -> String
|
||||
encuu = C.unpack . UU.encode . BSU.fromString
|
||||
|
@ -219,7 +236,7 @@ decxx :: String -> String
|
|||
decxx input =
|
||||
case XX.decode (BSU.fromString input) of
|
||||
Right decoded -> C.unpack decoded
|
||||
Left _ -> "Error decoding XX."
|
||||
Left _ -> "Error decoding XX.\n"
|
||||
|
||||
encxx :: String -> String
|
||||
encxx = C.unpack . XX.encode . BSU.fromString
|
||||
|
|
Loading…
Reference in New Issue