implemented decodeUTF8
This commit is contained in:
parent
08c77d4d0f
commit
eea4710b80
|
@ -35,6 +35,7 @@ import Conduit (ConduitT, mapC, (.|))
|
||||||
import qualified Data.ByteString as BS
|
import qualified Data.ByteString as BS
|
||||||
import Data.Maybe (fromMaybe)
|
import Data.Maybe (fromMaybe)
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
|
import Data.Text.Encoding (decodeUtf8')
|
||||||
|
|
||||||
-- | decode the rows from a stream of ByteStrings
|
-- | decode the rows from a stream of ByteStrings
|
||||||
decodeRows :: Monad m => ConduitT BS.ByteString [T.Text] m ()
|
decodeRows :: Monad m => ConduitT BS.ByteString [T.Text] m ()
|
||||||
|
@ -46,6 +47,8 @@ decodeRawRows = return ()
|
||||||
|
|
||||||
-- | decode a raw ByteString into Text (if possible)
|
-- | decode a raw ByteString into Text (if possible)
|
||||||
decodeUTF8 :: BS.ByteString -> Maybe T.Text
|
decodeUTF8 :: BS.ByteString -> Maybe T.Text
|
||||||
decodeUTF8 = const Nothing
|
decodeUTF8 bs = case decodeUtf8' bs of
|
||||||
|
Left _ -> Nothing
|
||||||
|
Right txt -> Just txt
|
||||||
|
|
||||||
--jl
|
--jl
|
||||||
|
|
|
@ -24,13 +24,14 @@ module Data.CSV.SlurpSpec (spec) where
|
||||||
|
|
||||||
import Conduit (runConduit, (.|))
|
import Conduit (runConduit, (.|))
|
||||||
import Data.Conduit.List (consume, sourceList)
|
import Data.Conduit.List (consume, sourceList)
|
||||||
import Test.Hspec (Spec, context, describe, shouldBe, xit)
|
import Test.Hspec (Spec, context, describe, it, shouldBe, xit)
|
||||||
|
|
||||||
import Data.CSV.Slurp
|
import Data.CSV.Slurp
|
||||||
|
|
||||||
spec :: Spec
|
spec :: Spec
|
||||||
spec = describe "Data.CSV.Slurp"
|
spec = describe "Data.CSV.Slurp" $ do
|
||||||
decodeRowsSpec
|
decodeRowsSpec
|
||||||
|
decodeUTF8Spec
|
||||||
|
|
||||||
decodeRowsSpec :: Spec
|
decodeRowsSpec :: Spec
|
||||||
decodeRowsSpec = describe "decodeRows" $ mapM_
|
decodeRowsSpec = describe "decodeRows" $ mapM_
|
||||||
|
@ -59,4 +60,18 @@ decodeRowsSpec = describe "decodeRows" $ mapM_
|
||||||
invalidIn = ["\"a"]
|
invalidIn = ["\"a"]
|
||||||
validRes = [["foo", "bar"], ["baz", "quux"]]
|
validRes = [["foo", "bar"], ["baz", "quux"]]
|
||||||
|
|
||||||
|
decodeUTF8Spec :: Spec
|
||||||
|
decodeUTF8Spec = describe "decodeUTF8" $ mapM_
|
||||||
|
( \(label, input, expected) -> context label $
|
||||||
|
it ("should be " ++ show expected) $
|
||||||
|
decodeUTF8 input `shouldBe` expected
|
||||||
|
)
|
||||||
|
|
||||||
|
-- label, input, expected
|
||||||
|
[ ( "plain ASCII", "hello", Just "hello" )
|
||||||
|
, ( "valid UTF8", "\xc3\xa9", Just "é" )
|
||||||
|
, ( "invalid UTF8", "\xff", Nothing )
|
||||||
|
, ( "blank", "", Just "" )
|
||||||
|
]
|
||||||
|
|
||||||
--jl
|
--jl
|
||||||
|
|
Loading…
Reference in New Issue
Block a user