module Iri.PercentEncoding where
import Iri.Prelude
matchHexByte :: a -> (Word8 -> a) -> Word8 -> a
matchHexByte failure success x =
if x >= 48 && x <= 57
then success (x 48)
else if x >= 65 && x <= 70
then success (x 55)
else if x >= 97 && x <= 102
then success (x 87)
else failure
matchPercentEncodedBytes :: a -> (Word8 -> a) -> Word8 -> Word8 -> a
matchPercentEncodedBytes failure success byte1 byte2 =
matchHexByte failure firstByteSuccess byte1
where
firstByteSuccess decodedByte1 =
matchHexByte failure secondByteSuccess byte2
where
secondByteSuccess decodedByte2 =
success (shiftL decodedByte1 4 .|. decodedByte2)