-- Copyright 2017 Fernando Rincon Martin -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. -- You may obtain a copy of the License at -- -- http://www.apache.org/licenses/LICENSE-2.0 -- -- Unless required by applicable law or agreed to in writing, software -- distributed under the License is distributed on an "AS IS" BASIS, -- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -- See the License for the specific language governing permissions and -- limitations under the License. {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE OverloadedStrings #-} {-| Parser for ping output. Common Types. -} module Data.Attoparsec.Ping ( PingResult(..) , PingError(..) , LineResult(..) , ReplyResult(..) ) where import Control.Applicative ((<|>)) import Data.Attoparsec.Text import Data.IP import Data.Text (Text) import qualified Data.Text as T import Data.Word (Word32) import Development.Placeholders data PingResult = PingSucceed { hostAddress :: IPv4 , hostNameResolved :: Maybe Text , bytesOfData :: Int , lineResults :: [LineResult] } | PingError PingError deriving (Eq, Show) data PingError = HostNotFound Text deriving (Eq, Show) data LineResult = ReplyFrom IPv4 ReplyResult | RequestTimedOut | GeneralFailure deriving (Eq, Show) data ReplyResult = ResponseReceived { bytes :: Int , timeInMs :: Int , ttl :: Int } | DestinationHostUnreachable deriving (Eq, Show)