module Tahoe.Netstring (
    netstring,
) where

import qualified Data.ByteString as B
import qualified Data.ByteString.Char8 as C8

-- | Encode a bytestring as a netstring.
netstring :: B.ByteString -> B.ByteString
netstring :: ByteString -> ByteString
netstring ByteString
xs =
    [ByteString] -> ByteString
B.concat
        [ String -> ByteString
C8.pack (String -> ByteString)
-> (ByteString -> String) -> ByteString -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String
forall a. Show a => a -> String
show (Int -> String) -> (ByteString -> Int) -> ByteString -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Int
B.length (ByteString -> ByteString) -> ByteString -> ByteString
forall a b. (a -> b) -> a -> b
$ ByteString
xs
        , ByteString
":"
        , ByteString
xs
        , ByteString
","
        ]