]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - ImplantFile.hs
Use base64-bytestring instead of dataenc
[Lucu.git] / ImplantFile.hs
index 1d7d43d8ce21f51666bb53b3b4652d94f37de063..fd57fadc456023ef5e78eee0b018098b12cada39 100644 (file)
@@ -1,9 +1,11 @@
-import           Codec.Binary.Base64
 import           Codec.Compression.GZip
 import           Control.Monad
 import           Data.Bits
+import qualified Data.ByteString as BS
+import qualified Data.ByteString.Base64 as B64
+import qualified Data.ByteString.Char8 as C8
 import qualified Data.ByteString.Lazy as Lazy (ByteString)
-import qualified Data.ByteString.Lazy as L hiding (ByteString)
+import qualified Data.ByteString.Lazy as LS hiding (ByteString)
 import           Data.Char
 import           Data.Int
 import           Data.Maybe
@@ -108,22 +110,22 @@ generateHaskellSource opts srcFile
 
          let compParams  = defaultCompressParams { compressLevel = bestCompression }
              gzippedData = compressWith compParams input
-             originalLen = L.length input
-             gzippedLen  = L.length gzippedData
+             originalLen = LS.length input
+             gzippedLen  = LS.length gzippedData
              useGZip     = originalLen > gzippedLen
-             rawB64      = encode $ L.unpack input
-             gzippedB64  = encode $ L.unpack gzippedData
+             rawB64      = B64.encode $ BS.concat $ LS.toChunks input
+             gzippedB64  = B64.encode $ BS.concat $ LS.toChunks gzippedData
 
          header <- mkHeader srcFile originalLen gzippedLen useGZip mimeType eTag lastMod
              
          let hsModule = HsModule undefined (Module modName) (Just exports) imports decls
              exports  = [HsEVar (UnQual (HsIdent symName))]
-             imports  = [ HsImportDecl undefined (Module "Codec.Binary.Base64")
-                                       False Nothing Nothing
+             imports  = [ HsImportDecl undefined (Module "Data.ByteString.Base64")
+                                       True (Just (Module "B64")) Nothing
+                        , HsImportDecl undefined (Module "Data.ByteString.Char8")
+                                       True (Just (Module "C8")) Nothing
                         , HsImportDecl undefined (Module "Data.ByteString.Lazy")
-                                       True (Just (Module "L")) Nothing
-                        , HsImportDecl undefined (Module "Data.Maybe")
-                                       False Nothing Nothing
+                                       True (Just (Module "LS")) Nothing
                         , HsImportDecl undefined (Module "Data.Time")
                                        False Nothing Nothing
                         , HsImportDecl undefined (Module "Network.HTTP.Lucu")
@@ -295,37 +297,35 @@ generateHaskellSource opts srcFile
              declGZippedData 
                  = [ HsTypeSig undefined [HsIdent "gzippedData"]
                                (HsQualType []
-                                (HsTyCon (Qual (Module "L") (HsIdent "ByteString"))))
+                                (HsTyCon (Qual (Module "LS") (HsIdent "ByteString"))))
                    , HsFunBind [HsMatch undefined (HsIdent "gzippedData")
                                 [] (HsUnGuardedRhs defGZippedData) []]
                    ]
 
              defGZippedData :: HsExp
              defGZippedData 
-                 = HsApp (HsVar (Qual (Module "L") (HsIdent "pack")))
-                   (HsParen
-                    (HsApp (HsVar (UnQual (HsIdent "fromJust")))
-                     (HsParen
-                      (HsApp (HsVar (UnQual (HsIdent "decode")))
-                       (HsLit (HsString gzippedB64))))))
+                 = HsApp (HsVar (Qual (Module "LS") (HsIdent "fromChunks")))
+                   (HsList [HsApp (HsVar (Qual (Module "B64") (HsIdent "decodeLenient")))
+                            (HsParen
+                             (HsApp (HsVar (Qual (Module "C8") (HsIdent "pack")))
+                              (HsLit (HsString $ C8.unpack gzippedB64))))])
 
              declRawData :: [HsDecl]
              declRawData 
                  = [ HsTypeSig undefined [HsIdent "rawData"]
                                (HsQualType []
-                                (HsTyCon (Qual (Module "L") (HsIdent "ByteString"))))
+                                (HsTyCon (Qual (Module "LS") (HsIdent "ByteString"))))
                    , HsFunBind [HsMatch undefined (HsIdent "rawData")
                                 [] (HsUnGuardedRhs defRawData) []]
                    ]
 
              defRawData :: HsExp
              defRawData
-                 = HsApp (HsVar (Qual (Module "L") (HsIdent "pack")))
-                   (HsParen
-                    (HsApp (HsVar (UnQual (HsIdent "fromJust")))
-                     (HsParen
-                      (HsApp (HsVar (UnQual (HsIdent "decode")))
-                       (HsLit (HsString rawB64))))))
+                 = HsApp (HsVar (Qual (Module "LS") (HsIdent "fromChunks")))
+                   (HsList [HsApp (HsVar (Qual (Module "B64") (HsIdent "decodeLenient")))
+                            (HsParen
+                             (HsApp (HsVar (Qual (Module "C8") (HsIdent "pack")))
+                              (HsLit (HsString $ C8.unpack rawB64))))])
 
          hPutStrLn output header
          hPutStrLn output (prettyPrint hsModule)
@@ -435,8 +435,8 @@ getETag opts input
 
 
 openInput :: FilePath -> IO Lazy.ByteString
-openInput "-"   = L.getContents
-openInput fpath = L.readFile fpath
+openInput "-"   = LS.getContents
+openInput fpath = LS.readFile fpath
 
 
 openOutput :: [CmdOpt] -> IO Handle
@@ -466,9 +466,9 @@ openOutput opts
          Last Modified: 2007-11-05 13:53:42.231882 JST
    -}
   module Foo.Bar.Baz (baz) where
-  import Codec.Binary.Base64
-  import qualified Data.ByteString.Lazy as L
-  import Data.Maybe
+  import qualified Data.ByteString.Base64 as B64
+  import qualified Data.ByteString.Char8 as C8
+  import qualified Data.ByteString.Lazy as LS
   import Data.Time
   import Network.HTTP.Lucu
 
@@ -495,8 +495,8 @@ openOutput opts
   contentType :: MIMEType
   contentType = read "image/png"
 
-  rawData :: L.ByteString
-  rawData = L.pack (fromJust (decode "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQgRGlzdHJ..."))
+  rawData :: LS.ByteString
+  rawData = LS.fromChunks [B64.decodeLenient (C8.pack "IyEvdXNyL2Jpbi9lbnYgcnVuZ2hjCgppbXBvcnQgRGlzdHJ...")]
   ------------------------------------------------------------------------------
 
   壓縮される場合は次のやうに變はる:
@@ -527,7 +527,7 @@ openOutput opts
         }
   
   -- rawData の代はりに gzippedData
-  gzippedData :: L.ByteString
-  gzippedData = L.pack (fromJust (decode "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGAAAAB..."))
+  gzippedData :: LS.ByteString
+  gzippedData = LS.fromChunks [B64.decodeLenient (C8.pack "Otb/+DniOlRgAAAAYAAAAGAAAAB/6QOmToAEIGAAAAB...")]
   ------------------------------------------------------------------------------
  -}