packages feed

hs-multiaddr-0.1.0.0: src/Data/Multiaddr/IPv6.hs

module Data.Multiaddr.IPv6
  (
    IPv6 (..),
    toString,
    parse,
    encode,
    parseB
  ) where

import qualified Text.ParserCombinators.ReadP as Parser
import qualified Data.ByteString as BSStrict
import qualified Data.Multiaddr.VarInt as VarInt

import Data.IP (IPv6 (..), fromIPv6b, toIPv6b)
import Data.Serialize.Get (Get)

toString :: IPv6 -> String
toString = show

parse :: Parser.ReadP IPv6
parse = Parser.readS_to_P reads

encode :: IPv6 -> BSStrict.ByteString
encode = BSStrict.pack . map fromIntegral . fromIPv6b

parseB :: Get IPv6
parseB =
  fmap (toIPv6b . map fromIntegral . BSStrict.unpack) $
  VarInt.decodeSize 128