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