-- | LogIp and SubnetMask module Subnet.Ip where import Subnet.Binary import Data.List import Data.List.Split newtype SubnetMask = SubnetMask { getSubnetMask :: String } deriving (Ord, Show, Eq) newtype LogIp = LogIp { getLogIp :: String } deriving (Ord, Show, Eq) mkSubnetMask :: String -> SubnetMask mkSubnetMask x | (&&) ((length (readIp x)) == 4) $ all (==True) $ map (\x -> x >= "0" || x <= "255") $ readIp x = SubnetMask x | otherwise = error $ x ++ " NOT A SUBNETMASK JON" mkLogIp :: String -> LogIp mkLogIp x | (&&) ((length (readIp x)) == 4) $ all (==True) $ map (\x -> x <= "255" || x >= "0") $ readIp x = LogIp x | otherwise = error "stfu jon" showIp = intercalate "." readIp = splitOn "." readLogIp :: LogIp -> Binary readLogIp = fixets . mkBinary . concat . map (getBinary . fixets . toBinary . read) . readIp . getLogIp readSubnetMask :: SubnetMask -> Binary readSubnetMask = fixets . mkBinary . concat . map (getBinary . fixets . toBinary . read) . readIp . getSubnetMask showLogIp :: Binary -> LogIp showLogIp = mkLogIp . intercalate "." . map (show . fromBinary . mkBinary) . chunksOf 8 . getBinary showSubnetMask :: Binary -> SubnetMask showSubnetMask = mkSubnetMask . intercalate "." . map (show . fromBinary . mkBinary) . chunksOf 8 . getBinary modifyLogIp :: (String -> String) -> LogIp -> LogIp modifyLogIp f = mkLogIp . f . getLogIp addOneLogIp :: LogIp -> LogIp addOneLogIp = showLogIp . addOne . readLogIp