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 +7/−0
- servant-static-th.cabal +3/−2
- src/Servant/Static/TH/Internal/Mime.hs +13/−7
+ 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) ]