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

module Data.Radix1Tree.Word8.Key
  ( -- * Build
    Build1

    -- ** Raw
  , buildBytes

    -- ** ByteString
  , buildByteString
  , buildShortByteString

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

    -- * Feed
  , Feed1

    -- ** Raw
  , feedBytes

    -- ** ByteString
    -- | See "Data.Radix1Tree.Word8.Key.Unsafe#g:feed.bytestring".

    -- ** Text
    -- | See "Data.Radix1Tree.Word8.Key.Unsafe#g:feed.text".
  ) where

import           Data.RadixNTree.Word8.Key

import qualified Data.ByteString as Strict (ByteString)
import           Data.ByteString.Short (ShortByteString)
import           Data.List.NonEmpty (NonEmpty)
import           Data.Word



-- | Convert the key into a non-empty list of bytes.
buildBytes :: Build1 -> NonEmpty Word8
buildBytes :: Build1 -> NonEmpty Word8
buildBytes = Build1 -> NonEmpty Word8
buildBytes1

-- | Convert the key into a non-empty strict 'Strict.ByteString'.
buildByteString :: Build1 -> Strict.ByteString
buildByteString :: Build1 -> ByteString
buildByteString = Build1 -> ByteString
buildByteString1

-- | Convert the key into a non-empty 'ShortByteString'.
buildShortByteString :: Build1 -> ShortByteString
buildShortByteString :: Build1 -> ShortByteString
buildShortByteString = Build1 -> ShortByteString
buildShortByteString1



{-# INLINE feedBytes #-}
-- | Convert the non-empty list of bytes into a key.
feedBytes :: NonEmpty Word8 -> Feed1
feedBytes :: NonEmpty Word8 -> Feed1
feedBytes = NonEmpty Word8 -> Feed1
feedBytes1