Compare commits

..

No commits in common. "3bc1be9eb9092a67b69997d426fd44ae24f14036" and "22b6942900f572f5b026b3cb7e1c724dd6dd3b7d" have entirely different histories.

3 changed files with 16 additions and 19 deletions

View File

@ -1,5 +1,3 @@
# Changelog for csv-sip
## Unreleased changes
- changed the types of encodeCSV and encodeRawCSV to make them more generic
- slight re-structuring of documentation

View File

@ -52,9 +52,8 @@ module Data.CSV.Sip (
labelFields,
decodeRows,
decodeRawRows,
toBytes,
-- * Helper Functions
decodeUTF8,
toBytes,
) where
import Conduit
@ -212,6 +211,12 @@ decodeRows = decodeRawRows .| mapC (map $ fromMaybe "" . decodeUTF8)
decodeRawRows :: Monad m => ConduitT BS.ByteString [BS.ByteString] m ()
decodeRawRows = toBytes .| evalStateT decodeLoop newDecodeState
-- | decode a raw ByteString into Text (if possible)
decodeUTF8 :: BS.ByteString -> Maybe T.Text
decodeUTF8 bs = case decodeUtf8' bs of
Left _ -> Nothing
Right txt -> Just txt
-- | convert a stream to ByteStrings to a stream of bytes
toBytes :: Monad m => ConduitT BS.ByteString Word8 m ()
toBytes = await >>= \case
@ -221,12 +226,6 @@ toBytes = await >>= \case
toBytes
Nothing -> return ()
-- | decode a raw ByteString into Text (if possible)
decodeUTF8 :: BS.ByteString -> Maybe T.Text
decodeUTF8 bs = case decodeUtf8' bs of
Left _ -> Nothing
Right txt -> Just txt
-- Internal
data DecodeState = DecodeState

View File

@ -40,8 +40,8 @@ spec = describe "Data.CSV.Sip" $ do
labelFieldsSpec
decodeRowsSpec
decodeRawRowsSpec
toBytesSpec
decodeUTF8Spec
toBytesSpec
encodeCSVSpec :: Spec
encodeCSVSpec = describe "encodeCSV" $ do
@ -327,14 +327,6 @@ decodeRawRowsSpec = describe "decodeRawRows" $ mapM_
, ["baz", "quux"]
]
toBytesSpec :: Spec
toBytesSpec = describe "toBytes" $ let
input = ["ab", "cd"]
expected = map (fromIntegral . ord) "abcd"
in it ("should be " ++ show expected) $ do
result <- runConduit $ sourceList input .| toBytes .| consume
result `shouldBe` expected
decodeUTF8Spec :: Spec
decodeUTF8Spec = describe "decodeUTF8" $ mapM_
( \(label, input, expected) -> context label $
@ -349,4 +341,12 @@ decodeUTF8Spec = describe "decodeUTF8" $ mapM_
, ( "blank", "", Just "" )
]
toBytesSpec :: Spec
toBytesSpec = describe "toBytes" $ let
input = ["ab", "cd"]
expected = map (fromIntegral . ord) "abcd"
in it ("should be " ++ show expected) $ do
result <- runConduit $ sourceList input .| toBytes .| consume
result `shouldBe` expected
--jl