{-|
    Safe functions for building and destroying radix tree keys.
 -}

module Data.RadixTree.Word8.Key
  ( -- * Build
    Build

    -- ** Raw
  , buildBytes

    -- ** ByteString
  , buildByteString
  , buildShortByteString

    -- ** Text
    -- | See "Data.RadixTree.Word8.Key.Unsafe#g:build/text".

    -- * Feed
  , Feed

    -- ** Raw
  , feedBytes

    -- ** ByteString
  , feedByteString
  , feedShortByteString
  , feedLazyByteString

    -- ** Text
  , feedText
  , feedLazyText
  ) where

import           Data.RadixNTree.Word8.Key

import qualified Data.ByteString as Strict (ByteString)
import qualified Data.ByteString.Lazy as Lazy (ByteString)
import           Data.ByteString.Short (ShortByteString)
import qualified Data.Text as Strict (Text)
import qualified Data.Text.Lazy as Lazy (Text)
import           Data.Word



-- | Convert a key into a list of bytes.
buildBytes :: Build -> [Word8]
buildBytes :: Build -> [Word8]
buildBytes = Build -> [Word8]
buildBytes0

-- | Convert a key into a strict 'Strict.ByteString'.
buildByteString :: Build -> Strict.ByteString
buildByteString :: Build -> ByteString
buildByteString = Build -> ByteString
buildByteString0

-- | Convert a key into a 'ShortByteString'.
buildShortByteString :: Build -> ShortByteString
buildShortByteString :: Build -> ShortByteString
buildShortByteString = Build -> ShortByteString
buildShortByteString0



{-# INLINE feedBytes #-}
-- | Convert a list of bytes into a key.
feedBytes :: [Word8] -> Feed
feedBytes :: [Word8] -> Feed
feedBytes = [Word8] -> Feed
feedBytes0

{-# INLINE feedByteString #-}
-- | Convert a strict 'Strict.ByteString' into a key.
feedByteString :: Strict.ByteString -> Feed
feedByteString :: ByteString -> Feed
feedByteString = ByteString -> Feed
feedByteString0

{-# INLINE feedShortByteString #-}
-- | Convert a 'ShortByteString' into a key.
feedShortByteString :: ShortByteString -> Feed
feedShortByteString :: ShortByteString -> Feed
feedShortByteString = ShortByteString -> Feed
feedShortByteString0

{-# INLINE feedLazyByteString #-}
-- | Convert a lazy 'Lazy.ByteString' into a key.
feedLazyByteString :: Lazy.ByteString -> Feed
feedLazyByteString :: ByteString -> Feed
feedLazyByteString = ByteString -> Feed
feedLazyByteString0



{-# INLINE feedText #-}
-- | Convert a strict 'Strict.Text' into a key.
feedText :: Strict.Text -> Feed
feedText :: Text -> Feed
feedText = Text -> Feed
feedText0

{-# INLINE feedLazyText #-}
-- | Convert a lazy 'Lazy.Text' into a key.
feedLazyText :: Lazy.Text -> Feed
feedLazyText :: Text -> Feed
feedLazyText = Text -> Feed
feedLazyText0