packages feed

unwitch 3.0.0 → 3.1.0

raw patch · 4 files changed

+119/−1 lines, 4 filesdep +os-string

Dependencies added: os-string

Files

Changelog.md view
@@ -1,5 +1,21 @@ # Change log for unwitch project +## Version 3.1.0++### Added++ New Text conversions ported from the from-text library, using explicit+  named functions instead of typeclasses:+  - toLazyByteStringUtf8 — encode Text as UTF-8 lazy ByteString+  - toByteStringBuilderUtf8 — encode Text as UTF-8 ByteString Builder+  - toTextBuilder — convert Text to lazy Text Builder+  - toShortByteStringUtf8 — encode Text as UTF-8 ShortByteString+  - toPosixString — encode Text as UTF-8 PosixString (GHC only)+  - toWindowsString — encode Text as UTF-16 LE WindowsString (GHC only)+  - toOsString — encode Text to platform-native OsString (GHC only)++ New dependency: os-string (for OsString/PosixString/WindowsString support)++ All new conversions are guarded behind __GLASGOW_HASKELL__ for MicroHs+  compatibility+ ## Version 3.0.0  ### Breaking changes (GHC only)
src/Unwitch/Convert/Text.hs view
@@ -9,6 +9,15 @@   , toByteStringUtf32LE   , toByteStringUtf32BE   , toByteStringLatin1+#ifdef __GLASGOW_HASKELL__+  , toLazyByteStringUtf8+  , toByteStringBuilderUtf8+  , toTextBuilder+  , toShortByteStringUtf8+  , toPosixString+  , toWindowsString+  , toOsString+#endif   ) where @@ -19,6 +28,18 @@ import Data.Text.Encoding qualified as TE import Data.Text.Lazy qualified as LT +#ifdef __GLASGOW_HASKELL__+import Data.ByteString.Lazy qualified as LBS+import Data.ByteString.Builder qualified as BB+import Data.ByteString.Short qualified as SBS+import Data.ByteString.Short (ShortByteString)+import Data.Coerce (coerce)+import Data.Text.Lazy.Builder qualified as TLB+import System.OsString qualified as OS+import System.OsString.Internal.Types qualified as OSIT+import System.OsString.Posix qualified as OSP+#endif+ toLazyText :: Text -> LT.Text #ifdef __GLASGOW_HASKELL__ toLazyText = LT.fromStrict@@ -56,3 +77,36 @@  isLatin1 :: Char -> Bool isLatin1 c = c <= '\xFF'++#ifdef __GLASGOW_HASKELL__+-- | Encode as UTF-8 lazy 'LBS.ByteString'.+toLazyByteStringUtf8 :: Text -> LBS.ByteString+toLazyByteStringUtf8 = LBS.fromStrict . TE.encodeUtf8++-- | Encode as UTF-8 'BB.Builder'.+toByteStringBuilderUtf8 :: Text -> BB.Builder+toByteStringBuilderUtf8 = TE.encodeUtf8Builder++-- | Convert to a lazy 'TLB.Builder'.+toTextBuilder :: Text -> TLB.Builder+toTextBuilder = TLB.fromText++-- | Encode as UTF-8 'ShortByteString'.+toShortByteStringUtf8 :: Text -> ShortByteString+toShortByteStringUtf8 = SBS.toShort . TE.encodeUtf8++-- | Encode as UTF-8 'OSP.PosixString'.+toPosixString :: Text -> OSP.PosixString+toPosixString = coerce . SBS.toShort . TE.encodeUtf8++-- | Encode as UTF-16 LE 'OSIT.WindowsString'.+toWindowsString :: Text -> OSIT.WindowsString+toWindowsString = coerce . SBS.toShort . TE.encodeUtf16LE++-- | Encode to the platform's native 'OS.OsString'.+-- UTF-16 LE on Windows, UTF-8 on POSIX.+toOsString :: Text -> OS.OsString+toOsString = case OS.coercionToPlatformTypes of+  Left{}  -> coerce . toWindowsString+  Right{} -> coerce . toPosixString+#endif
test/Test/Convert/TextSpec.hs view
@@ -6,6 +6,16 @@ import qualified Unwitch.Convert.LazyText as LazyText import qualified Unwitch.Convert.ByteString as ByteString +#ifdef __GLASGOW_HASKELL__+import Data.ByteString.Lazy qualified as LBS+import Data.ByteString.Builder qualified as BB+import Data.ByteString.Short qualified as SBS+import Data.Text.Lazy qualified as LT+import Data.Text.Lazy.Builder qualified as TLB+import qualified System.OsString as OS+import qualified System.OsString.Posix as OSP+#endif+ spec :: Spec spec = describe "Unwitch.Convert.Text" $ do @@ -66,3 +76,40 @@     it "fails for chars above 0xFF" $       let t = T.pack "\x0100" -- Latin Extended-A       in Text.toByteStringLatin1 t `shouldBe` Nothing++#ifdef __GLASGOW_HASKELL__+  describe "toLazyByteStringUtf8" $ do+    it "encodes ASCII" $+      Text.toLazyByteStringUtf8 "hello" `shouldBe` "hello"+    it "produces same bytes as toByteStringUtf8" $+      let t = T.pack "caf\x00E9"+      in LBS.toStrict (Text.toLazyByteStringUtf8 t) `shouldBe` Text.toByteStringUtf8 t++  describe "toByteStringBuilderUtf8" $+    it "produces same bytes as toByteStringUtf8" $+      let t = T.pack "caf\x00E9 \x1F600"+      in LBS.toStrict (BB.toLazyByteString (Text.toByteStringBuilderUtf8 t))+           `shouldBe` Text.toByteStringUtf8 t++  describe "toTextBuilder" $+    it "produces same text as input" $+      let t = T.pack "hello \x00E9\x1F600"+      in LT.toStrict (TLB.toLazyText (Text.toTextBuilder t)) `shouldBe` t++  describe "toShortByteStringUtf8" $+    it "produces same bytes as toByteStringUtf8" $+      let t = T.pack "caf\x00E9 \x1F600"+      in SBS.fromShort (Text.toShortByteStringUtf8 t) `shouldBe` Text.toByteStringUtf8 t++  describe "toPosixString" $+    it "matches encodeUtf from os-string" $+      let t = T.pack "caf\x00E9"+          expected = OSP.unsafeEncodeUtf (T.unpack t)+      in Text.toPosixString t `shouldBe` expected++  describe "toOsString" $+    it "matches encodeUtf from os-string" $+      let t = T.pack "hello/world.txt"+          expected = OS.unsafeEncodeUtf (T.unpack t)+      in Text.toOsString t `shouldBe` expected+#endif
unwitch.cabal view
@@ -1,7 +1,7 @@ cabal-version:      3.0  name:           unwitch-version:        3.0.0+version:        3.1.0 homepage:       https://github.com/jappeace/unwitch#readme synopsis:  converts between primitives description: @@ -80,6 +80,7 @@   build-depends:       base >=4.18.0.0 && <4.23,       bytestring >= 0.10 && < 0.13,+      os-string >= 2.0 && < 2.1,       text >= 1.2 && < 2.2    default-language: Haskell2010