ip-0.8.3: src/Net/IPv4/Range/Text.hs
module Net.IPv4.Range.Text
( encode
, decode
, decodeEither
, builder
, parser
, print
) where
import Prelude hiding (print)
import Net.Types (IPv4Range(..),IPv4(..))
import Data.Text (Text)
import Data.Word (Word8, Word32)
import qualified Data.Text.IO as Text
import qualified Data.Attoparsec.Text as AT
import qualified Data.Text.Lazy.Builder as TBuilder
import qualified Net.Internal as Internal
encode :: IPv4Range -> Text
encode (IPv4Range (IPv4 w) r) = Internal.rangeToDotDecimalText w r
decodeEither :: Text -> Either String IPv4Range
decodeEither = Internal.rangeFromDotDecimalText' mkIPv4Range
decode :: Text -> Maybe IPv4Range
decode = Internal.rightToMaybe . decodeEither
builder :: IPv4Range -> TBuilder.Builder
builder (IPv4Range (IPv4 w) r) = Internal.rangeToDotDecimalBuilder w r
parser :: AT.Parser IPv4Range
parser = Internal.dotDecimalRangeParser mkIPv4Range
-- | This exists mostly for testing purposes.
print :: IPv4Range -> IO ()
print = Text.putStrLn . encode
-- internal function
mkIPv4Range :: Word32 -> Word8 -> IPv4Range
mkIPv4Range w = IPv4Range (IPv4 w)
{-# INLINE mkIPv4Range #-}