packages feed

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

module Data.Multiaddr.IPv4
  (
    IPv4 (..),
    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 (IPv4 (..), fromIPv4, toIPv4)
import Data.Serialize.Get (Get)

toString :: IPv4 -> String
toString = show

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

encode :: IPv4 -> BSStrict.ByteString
encode = BSStrict.pack . map fromIntegral . fromIPv4

parseB :: Get IPv4
parseB =
  fmap (toIPv4 . map fromIntegral . BSStrict.unpack) $
  VarInt.decodeSize 32