tools-yj-0.1.0.19: src/Data/Text/ToolsYj.hs
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE TupleSections #-}
{-# LANGUAGE DataKinds, PolyKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}
module Data.Text.ToolsYj (cstrToText) where
import Foreign.Ptr
import Foreign.Storable
import Foreign.C.String
import Data.Text qualified as Txt
import Data.Text.Foreign qualified as Txt
cstrToText :: CString -> IO Txt.Text
cstrToText cs = Txt.peekCStringLen =<< cstringToCStringLen cs
cstringLength :: CString -> IO Int
cstringLength pc = do
c <- peek pc
case c of
0 -> pure 0
_ -> (+ 1) <$> cstringLength (pc `plusPtr` 1)
cstringToCStringLen :: CString -> IO CStringLen
cstringToCStringLen cs = (cs ,) <$> cstringLength cs