asif-3.1.0: src/Arbor/File/Format/Asif/Data/Ip.hs
module Arbor.File.Format.Asif.Data.Ip
( stringToIpv4
, stringToIpv6
, ipv4ToString
, ipv6ToString
, word32ToIpv4
, word32x4ToIpv6
, ipv4ToWord32
, ipv6ToWord32x4
, ipv4ToIpv6
) where
import Arbor.File.Format.Asif.Data.Read
import Data.IP
import Data.Word
import System.Endian
import Text.Read
stringToIpv4 :: String -> Maybe IPv4
stringToIpv4 str = if '.' `elem` str
then readMaybe str
else word32ToIpv4 <$> stringToAnyDigits str
stringToIpv6 :: String -> Maybe IPv6
stringToIpv6 = readMaybe
ipv4ToString :: IPv4 -> String
ipv4ToString = show
ipv6ToString :: IPv6 -> String
ipv6ToString = show
word32ToIpv4 :: Word32 -> IPv4
word32ToIpv4 = fromHostAddress . toBE32
word32x4ToIpv6 :: (Word32, Word32, Word32, Word32) -> IPv6
word32x4ToIpv6 = fromHostAddress6
ipv4ToWord32 :: IPv4 -> Word32
ipv4ToWord32 = fromBE32 . toHostAddress
ipv6ToWord32x4 :: IPv6 -> (Word32, Word32, Word32, Word32)
ipv6ToWord32x4 = toHostAddress6
ipv4ToIpv6 :: IPv4 -> IPv6
ipv4ToIpv6 = ipv4ToIPv6