module Binrep.Generic where

import Binrep.Type.NullTerminated
import Data.ByteString qualified as B
import Data.Text qualified as Text
import Data.Text.Encoding qualified as Text
import Refined.Unsafe

-- | Turn a constructor name into a prefix tag by adding a null terminator.
--
-- Not common in binary data representations, but safe and useful for debugging.
nullTermCstrPfxTag :: String -> NullTerminated B.ByteString
nullTermCstrPfxTag :: String -> NullTerminated ByteString
nullTermCstrPfxTag = ByteString -> NullTerminated ByteString
forall {k} x (p :: k). x -> Refined p x
reallyUnsafeRefine (ByteString -> NullTerminated ByteString)
-> (String -> ByteString) -> String -> NullTerminated ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> ByteString
Text.encodeUtf8 (Text -> ByteString) -> (String -> Text) -> String -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
Text.pack
-- ^ reallyUnsafeRefine : safe assuming Haskell constructor names are UTF-8 with
-- no null bytes allowed