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