implemented decodeUTF8

This commit is contained in:
Jonathan Lamothe 2022-04-19 16:31:04 -04:00
parent 08c77d4d0f
commit eea4710b80
2 changed files with 21 additions and 3 deletions

View File

@ -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

View File

@ -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