reworking functions and errorhandling
This commit is contained in:
parent
b542165601
commit
50de1c5558
56
Main.hs
56
Main.hs
|
@ -72,6 +72,34 @@ data Based = Decode {
|
|||
deriving(Show, Data, Typeable)
|
||||
|
||||
-- helper functions
|
||||
|
||||
convertToByteString :: String -> Either String BS.ByteString
|
||||
convertToByteString str =
|
||||
case BSU.fromString str of
|
||||
Just bs -> Right bs
|
||||
Nothing -> Left "Failed to convert string to ByteString."
|
||||
|
||||
decodeFromBase91 :: C.ByteString -> Either String BS.ByteString
|
||||
case B91.decode bs =
|
||||
Just bs -> Right decoded
|
||||
Nothing -> Left "Failed to decode from Base91."
|
||||
|
||||
|
||||
encodeToBase64 :: C.ByteString -> Either String BS.ByteString
|
||||
encodeToBase64 bs =
|
||||
case B64.encode bs of
|
||||
encoded | BS.null encoded -> Left "Failed to encode base64."
|
||||
| otherwise -> Right encoded
|
||||
|
||||
decodeFromBase64 :: C.ByteString -> Either String BS.ByteString
|
||||
decodeFromBase64 bs =
|
||||
case B64L.decodeLenient bs of
|
||||
decoded | BS.null decoded -> Left "Failed to decode from base64."
|
||||
| otherwise -> Right decoded
|
||||
-- | otherwise -> Right (BSU.toString decoded)
|
||||
-- Left err -> Left $ "Failed to decode from base64: " ++ err
|
||||
-- Right decoded -> Right decoded
|
||||
|
||||
binToInt :: [Int] -> Int
|
||||
binToInt [] = 0
|
||||
binToInt (x : xs) = x + 2 * binToInt xs
|
||||
|
@ -82,13 +110,33 @@ octToInt (x : xs) = x + 8 * octToInt xs
|
|||
|
||||
-- base functions
|
||||
-- without the show func, sequences like \n will not be shown as characters but will be executed as newline
|
||||
dec91 = C.unpack . B91.decode
|
||||
|
||||
-- dec91 = C.unpack . B91.decode
|
||||
dec91 :: C.ByteString -> Either String String
|
||||
dec91 input = do
|
||||
decoded <- decodeFromBase91 input
|
||||
-- return $ C.unpack decoded
|
||||
-- is the same as
|
||||
return (C.unpack decoded)
|
||||
|
||||
enc91 = B91.encode . BSU.fromString
|
||||
dec85 = C.unpack . U.fromRight . B85.decode . BSU.fromString
|
||||
enc85 = C.unpack . B85.encode . BSU.fromString
|
||||
-- dec64 = C.unpack . U.fromRight . B64.decode . BSU.fromString
|
||||
dec64 = C.unpack . B64L.decodeLenient . BSU.fromString
|
||||
enc64 = C.unpack . B64.encode . BSU.fromString
|
||||
|
||||
-- dec64 = C.unpack . B64L.decodeLenient . BSU.fromString
|
||||
dec64 :: String -> Either String String
|
||||
dec64 input = do
|
||||
byteString <- convertToByteString input
|
||||
decoded <- decodeFromBase64 byteString
|
||||
return $ BSU.toString decoded
|
||||
|
||||
-- enc64 = C.unpack . B64.encode . BSU.fromString
|
||||
enc64 :: String -> Either String String
|
||||
enc64 input = do
|
||||
byteString <- convertToByteString input
|
||||
encoded <- encodeToBase64 byteString
|
||||
return $ BS.unpack encoded
|
||||
|
||||
dec64url = C.unpack . U.fromRight . B64U.decode . BSU.fromString
|
||||
enc64url = C.unpack . B64U.encode . BSU.fromString
|
||||
decurl = HB.urlDecode
|
||||
|
|
Loading…
Reference in New Issue