packages feed

servant-static-th 0.1.0.5 → 0.1.0.6

raw patch · 3 files changed

+23/−9 lines, 3 filesPVP: minor bump suggested

API additions: PVP suggests at least a minor version bump

API changes (from Hackage documentation)

+ Servant.Static.TH.Internal.Mime: stringToBs :: String -> ByteString

Files

+ CHANGELOG.md view
@@ -0,0 +1,7 @@+# Changelog++## v1.0.1.6++-   Make it more efficient to embed bytestring filetypes.+-   Make everything other than HTML files be embedded as bytestrings.  Don't+    assume UTF8 encoding.
servant-static-th.cabal view
@@ -1,5 +1,5 @@ name:                servant-static-th-version:             0.1.0.5+version:             0.1.0.6 synopsis:            Embed a directory of static files in your Servant server description:         Please see <https://github.com/cdepillabout/servant-static-th#readme README.md>. homepage:            https://github.com/cdepillabout/servant-static-th@@ -10,7 +10,8 @@ copyright:           2017 Dennis Gosnell category:            Text build-type:          Simple-extra-source-files:  README.md+extra-source-files:  CHANGELOG.md+                   , README.md                    , test/test-dir/dir/inner-file.html                    , test/test-dir/dir/test.js                    , test/test-dir/hello.html
src/Servant/Static/TH/Internal/Mime.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE BangPatterns #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE OverloadedLists #-}@@ -22,7 +23,7 @@ module Servant.Static.TH.Internal.Mime where  import Data.ByteString (ByteString)-import qualified Data.ByteString as ByteString+import qualified Data.ByteString.Char8 as B8 import qualified Data.ByteString.Lazy as LByteString import Data.Map (Map) import qualified Data.Map as Map@@ -32,7 +33,8 @@ import Data.Text.Encoding (decodeUtf8With, encodeUtf8) import Data.Text.Encoding.Error (lenientDecode) import Data.Typeable (Typeable)-import Language.Haskell.TH (Exp, Q, Type, appE, stringE, varE)+import Language.Haskell.TH+       (Exp(AppE, LitE, VarE), Lit(StringL), Q, Type, appE, stringE, varE) import Network.HTTP.Media (MediaType, (//)) import Servant.HTML.Blaze (HTML) import Servant.API (Accept(contentType), MimeRender(mimeRender))@@ -63,10 +65,14 @@     -- look at 'htmlToExp' and 'byteStringtoExp'.   } +stringToBs :: String -> ByteString+stringToBs = B8.pack+ byteStringToExp :: ByteString -> Q Exp-byteStringToExp byteString =-  let word8List = ByteString.unpack byteString-  in [e|pure $ ByteString.pack word8List|]+byteStringToExp byteString = do+  helper <- [| stringToBs |]+  let !chars = B8.unpack byteString+  pure $! AppE (VarE 'pure) $! AppE helper $! LitE $! StringL chars  utf8ByteStringToExp :: ByteString -> Q Exp utf8ByteStringToExp byteString =@@ -90,9 +96,9 @@   , ("html", MimeTypeInfo [t|HTML|] [t|Html|] htmlToExp)   , ("jpeg", MimeTypeInfo [t|JPEG|] [t|ByteString|] byteStringToExp)   , ("jpg", MimeTypeInfo [t|JPEG|] [t|ByteString|] byteStringToExp)-  , ("js", MimeTypeInfo [t|JS|] [t|ByteString|] utf8ByteStringToExp)+  , ("js", MimeTypeInfo [t|JS|] [t|ByteString|] byteStringToExp)   , ("png", MimeTypeInfo [t|PNG|] [t|ByteString|] byteStringToExp)-  , ("svg", MimeTypeInfo [t|SVG|] [t|ByteString|] utf8ByteStringToExp)+  , ("svg", MimeTypeInfo [t|SVG|] [t|ByteString|] byteStringToExp)   , ("txt", MimeTypeInfo [t|TXT|] [t|ByteString|] byteStringToExp)   ]