@@ -36,22 +36,25 @@ module Streamly.Internal.Serialize.ToBytes
36 , float32le
36 , float32le
37 , double64be
37 , double64be
38 , double64le
38 , double64le
42#include "MachDeps.h"
44#include "MachDeps.h"
44import Data.Bits (shiftR)
46import Data.Bits (shiftR)
47+import Data.Char (ord)
48+import Data.Int (Int8, Int16, Int32, Int64)
45import Data.Word (Word8, Word16, Word32, Word64)
49import Data.Word (Word8, Word16, Word32, Word64)
46import GHC.Float (castDoubleToWord64, castFloatToWord32)
50import GHC.Float (castDoubleToWord64, castFloatToWord32)
47import Streamly.Internal.Data.Stream.StreamD (Stream)
51import Streamly.Internal.Data.Stream.StreamD (Stream)
48import Streamly.Internal.Data.Stream.StreamD (Step(..))
52import Streamly.Internal.Data.Stream.StreamD (Step(..))
53+import Streamly.Internal.Unicode.Stream (readCharUtf8)
50import qualified Streamly.Internal.Data.Stream.StreamD as Stream
55import qualified Streamly.Internal.Data.Stream.StreamD as Stream
51import qualified Streamly.Internal.Data.Stream.StreamD as D
56import qualified Streamly.Internal.Data.Stream.StreamD as D
53−import Data.Int (Int8, Int16, Int32, Int64)
55-- XXX Use StreamD directly?
58-- XXX Use StreamD directly?
57-- | A value of type '()' is encoded as @0@ in binary encoding.
60-- | A value of type '()' is encoded as @0@ in binary encoding.
@@ -335,6 +338,16 @@ double64be = word64beD . castDoubleToWord64
335double64le :: Monad m => Double -> Stream m Word8
338double64le :: Monad m => Double -> Stream m Word8
336double64le = word64leD . castDoubleToWord64
339double64le = word64leD . castDoubleToWord64
341+-- | Encode a Unicode character to stream of bytes in 0-255 range.
343+{-# INLINE charLatin1 #-}
344+charLatin1 :: Applicative m => Char -> Stream m Word8
345+charLatin1 = Stream.fromPure . fromIntegral . ord
347+{-# INLINE charUtf8 #-}
348+charUtf8 :: Monad m => Char -> Stream m Word8
349+charUtf8 = Stream.unfold readCharUtf8
338-------------------------------------------------------------------------------
351-------------------------------------------------------------------------------
339-- Host byte order
352-- Host byte order
340-------------------------------------------------------------------------------
353-------------------------------------------------------------------------------