module Web.HttpApiData.Net () where
import Data.Monoid
import Data.Text (Text)
import Net.Types (IPv4,Mac)
import Web.HttpApiData (ToHttpApiData(..),FromHttpApiData(..))
import qualified Data.Text as Text
import qualified Net.IPv4 as IPv4
import qualified Net.Mac as Mac
instance ToHttpApiData Mac where
toUrlPiece = Mac.encode
toHeader = Mac.encodeUtf8
toQueryParam = Mac.encode
instance FromHttpApiData Mac where
parseUrlPiece = describeError mac . Mac.decode
parseQueryParam = describeError mac . Mac.decode
parseHeader = describeError mac . Mac.decodeUtf8
instance ToHttpApiData IPv4 where
toUrlPiece = IPv4.encode
toHeader = IPv4.encodeUtf8
toQueryParam = IPv4.encode
instance FromHttpApiData IPv4 where
parseUrlPiece = describeError ipv4 . IPv4.decode
parseQueryParam = describeError ipv4 . IPv4.decode
parseHeader = describeError ipv4 . IPv4.decodeUtf8
mac,ipv4 :: Text
mac = Text.pack "MAC Address"
ipv4 = Text.pack "IPv4 Address"
describeError :: Text -> Maybe a -> Either Text a
describeError name x = case x of
Nothing -> Left (Text.pack "could not parse " <> name)
Just a -> Right a