summaryrefslogtreecommitdiff
path: root/src/ConvertByteString.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-10-27 22:08:47 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-11-06 21:06:49 +0100
commite0762612e95b0816721165c5aba6189809fcde58 (patch)
tree57a2b7eed322086e6e19bfa652798d3dceceb6f6 /src/ConvertByteString.hs
parent0bb8daa7da52240a971a4ce83d97cfb62971ea78 (diff)
ByteString conversion classes
Diffstat (limited to 'src/ConvertByteString.hs')
-rw-r--r--src/ConvertByteString.hs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/ConvertByteString.hs b/src/ConvertByteString.hs
new file mode 100644
index 0000000..6b8f39f
--- /dev/null
+++ b/src/ConvertByteString.hs
@@ -0,0 +1,45 @@
+module ConvertByteString (
+ ToByteString(..),
+ FromByteString(..),
+ ConvertByteString(..),
+ BA.ScrubbedBytes,
+) where
+
+import Data.ByteArray qualified as BA
+import Data.ByteString (ByteString)
+import Data.ByteString.Unsafe qualified as BS
+
+import Foreign.Ptr
+
+
+class ToByteString a where
+ toByteString :: a -> ByteString
+ withByteArray :: a -> (Ptr p -> IO b) -> IO b
+
+class FromByteString a where
+ fromByteString :: ByteString -> a
+
+class ConvertByteString a b where
+ convert :: a -> b
+
+
+instance ToByteString ByteString where
+ toByteString = id
+ withByteArray bs f = BS.unsafeUseAsCString bs (f . castPtr)
+
+instance FromByteString ByteString where
+ fromByteString = id
+
+instance ToByteString a => ConvertByteString a ByteString where
+ convert = toByteString
+
+
+instance ToByteString BA.ScrubbedBytes where
+ toByteString = BA.convert
+ withByteArray = BA.withByteArray
+
+instance FromByteString BA.ScrubbedBytes where
+ fromByteString = BA.convert
+
+instance BA.ByteArrayAccess a => ConvertByteString a BA.ScrubbedBytes where
+ convert = BA.convert