, TemplateHaskell
, UnicodeSyntax
#-}
--- |Utility functions used internally in the Lucu httpd. These
--- functions may be useful too for something else.
+-- |Utility functions used internally in this package.
module Network.HTTP.Lucu.Utils
( splitBy
, quoteStr
import qualified Data.Ascii as A
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as Strict
-import qualified Data.ByteString.Unsafe as Strict
import qualified Data.ByteString.Lazy.Internal as Lazy
import Data.Char
import Data.List hiding (last)
import Network.URI
import Prelude hiding (last)
import Prelude.Unicode
-import System.IO.Unsafe
-- |>>> splitBy (== ':') "ab:c:def"
-- ["ab", "c", "def"]
-- |Convert an 'Ascii' to an 'Exp' representing it as a literal.
liftAscii ∷ Ascii → Q Exp
-liftAscii a = [| A.unsafeFromByteString
- $ unsafePerformIO
- $ Strict.unsafePackAddressLen $len $ptr
- |]
- where
- bs ∷ Strict.ByteString
- bs = A.toByteString a
-
- len, ptr ∷ Q Exp
- len = lift $ Strict.length bs
- ptr = litE $ stringPrimL $ Strict.unpack bs
+liftAscii a = [| A.unsafeFromByteString $(liftByteString $ A.toByteString a) |]
-- |Convert a 'CIAscii' to an 'Exp' representing it as a literal.
liftCIAscii ∷ CIAscii → Q Exp
-- |Convert an 'UTCTime' to an 'Exp' representing it as a literal.
liftUTCTime ∷ UTCTime → Q Exp
liftUTCTime (UTCTime {..})
- = [| UTCTime {
- utctDay = $(liftDay utctDay)
- , utctDayTime = $(liftDiffTime utctDayTime)
- }
- |]
+ = [| UTCTime $(liftDay utctDay) $(liftDiffTime utctDayTime) |]
liftDay ∷ Day → Q Exp
liftDay (ModifiedJulianDay {..})
- = [| ModifiedJulianDay {
- toModifiedJulianDay = $(lift toModifiedJulianDay)
- }
- |]
+ = [| ModifiedJulianDay $(lift toModifiedJulianDay) |]
liftDiffTime ∷ DiffTime → Q Exp
liftDiffTime dt = [| fromRational ($n % $d) ∷ DiffTime |]