yesod-ip 0.5.0 → 0.5.1
raw patch · 6 files changed
+87/−71 lines, 6 filesdep ~http-api-datadep ~ipdep ~path-pieces
Dependency ranges changed: http-api-data, ip, path-pieces, persistent, text, yesod-core, yesod-form
Files
- src/Database/Persist/Net/PostgreSQL.hs +17/−16
- src/Database/Persist/Net/Simple.hs +9/−9
- src/Web/HttpApiData/Net.hs +17/−18
- src/Web/PathPieces/Net.hs +9/−8
- src/Yesod/Form/Net.hs +27/−12
- yesod-ip.cabal +8/−8
src/Database/Persist/Net/PostgreSQL.hs view
@@ -9,40 +9,41 @@ module Database.Persist.Net.PostgreSQL () where +import Data.Monoid+import Data.Text (Text) import Database.Persist import Database.Persist.Class import Database.Persist.Sql--import Data.Text (Text)-import Data.Monoid import Net.Types (IPv4,Mac)+ import qualified Data.Text as Text-import qualified Net.IPv4.Text as IPv4Text-import qualified Net.IPv4.ByteString.Char8 as IPv4ByteString-import qualified Net.Mac.Text as MacText-import qualified Net.Mac.ByteString.Char8 as MacByteString+import qualified Net.IPv4 as IPv4+import qualified Net.Mac as Mac instance PersistField IPv4 where- toPersistValue = toPersistValue . IPv4Text.encode+ toPersistValue = toPersistValue . IPv4.encode fromPersistValue v = case v of- PersistDbSpecific s -> case IPv4ByteString.decode s of+ PersistDbSpecific s -> case IPv4.decodeUtf8 s of Just x -> Right x Nothing -> Left (Text.pack "PersistValue IPv4: Invalid format")- _ -> Left (Text.pack "PersistValue IPv4: Not a PersistDbSpecific")+ PersistText t -> case IPv4.decode t of+ Just x -> Right x+ Nothing -> Left (Text.pack "PersistValue IPv4: Invalid format")+ y -> Left $ Text.pack "PersistValue IPv4: Not a PersistDbSpecific: " <> Text.pack (show y) instance PersistFieldSql IPv4 where sqlType _ = SqlOther (Text.pack "inet") instance PersistField Mac where- toPersistValue = toPersistValue . MacText.encode+ toPersistValue = toPersistValue . Mac.encode fromPersistValue v = case v of- PersistDbSpecific s -> case MacByteString.decode s of+ PersistDbSpecific s -> case Mac.decodeUtf8 s of Just x -> Right x Nothing -> Left (Text.pack "PersistValue MAC: Invalid format")- _ -> Left (Text.pack "PersistValue MAC: Not a PersistDbSpecific")+ PersistText t -> case Mac.decode t of+ Just x -> Right x+ Nothing -> Left (Text.pack "PersistValue MAC: Invalid format")+ y -> Left $ Text.pack "PersistValue MAC: Not a PersistDbSpecific: " <> Text.pack (show y) instance PersistFieldSql Mac where sqlType _ = SqlOther (Text.pack "macaddr")---
src/Database/Persist/Net/Simple.hs view
@@ -10,27 +10,27 @@ module Database.Persist.Net.Simple () where +import Data.Monoid+import Data.Text (Text) import Database.Persist import Database.Persist.Class import Database.Persist.Sql--import Data.Text (Text)-import Data.Monoid import Net.Types (IPv4, Mac)+ import qualified Data.Text as Text-import qualified Net.IPv4.Text as IPv4Text-import qualified Net.Mac.Text as MacText+import qualified Net.IPv4 as IPv4+import qualified Net.Mac as Mac instance PersistField IPv4 where- toPersistValue = toPersistValueTextShow IPv4Text.encode- fromPersistValue = fromPersistValueTextRead IPv4Text.decode+ toPersistValue = toPersistValueTextShow IPv4.encode+ fromPersistValue = fromPersistValueTextRead IPv4.decode instance PersistFieldSql IPv4 where sqlType _ = SqlString instance PersistField Mac where- toPersistValue = toPersistValueTextShow MacText.encode- fromPersistValue = fromPersistValueTextRead MacText.decode+ toPersistValue = toPersistValueTextShow Mac.encode+ fromPersistValue = fromPersistValueTextRead Mac.decode instance PersistFieldSql Mac where sqlType _ = SqlString
src/Web/HttpApiData/Net.hs view
@@ -3,35 +3,34 @@ module Web.HttpApiData.Net () where -import Web.HttpApiData (ToHttpApiData(..),FromHttpApiData(..))-import Data.Text (Text) 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.Text as IPv4Text-import qualified Net.IPv4.ByteString.Char8 as IPv4ByteString-import qualified Net.Mac.Text as MacText-import qualified Net.Mac.ByteString.Char8 as MacByteString+import qualified Net.IPv4 as IPv4+import qualified Net.Mac as Mac instance ToHttpApiData Mac where- toUrlPiece = MacText.encode- toHeader = MacByteString.encode- toQueryParam = MacText.encode+ toUrlPiece = Mac.encode+ toHeader = Mac.encodeUtf8+ toQueryParam = Mac.encode instance FromHttpApiData Mac where- parseUrlPiece = describeError mac . MacText.decode- parseQueryParam = describeError mac . MacText.decode- parseHeader = describeError mac . MacByteString.decode+ parseUrlPiece = describeError mac . Mac.decode+ parseQueryParam = describeError mac . Mac.decode+ parseHeader = describeError mac . Mac.decodeUtf8 instance ToHttpApiData IPv4 where- toUrlPiece = IPv4Text.encode- toHeader = IPv4ByteString.encode- toQueryParam = IPv4Text.encode+ toUrlPiece = IPv4.encode+ toHeader = IPv4.encodeUtf8+ toQueryParam = IPv4.encode instance FromHttpApiData IPv4 where- parseUrlPiece = describeError ipv4 . IPv4Text.decode- parseQueryParam = describeError ipv4 . IPv4Text.decode- parseHeader = describeError ipv4 . IPv4ByteString.decode+ parseUrlPiece = describeError ipv4 . IPv4.decode+ parseQueryParam = describeError ipv4 . IPv4.decode+ parseHeader = describeError ipv4 . IPv4.decodeUtf8 mac,ipv4 :: Text mac = Text.pack "MAC Address"
src/Web/PathPieces/Net.hs view
@@ -3,18 +3,19 @@ module Web.PathPieces.Net where -import Web.PathPieces (PathPiece(..))-import Data.Text (Text) import Data.Monoid+import Data.Text (Text) import Net.Types (IPv4,Mac)-import qualified Net.IPv4.Text as IPv4Text-import qualified Net.Mac.Text as MacText+import Web.PathPieces (PathPiece(..)) +import qualified Net.IPv4 as IPv4+import qualified Net.Mac as Mac+ instance PathPiece Mac where- toPathPiece = MacText.encode- fromPathPiece = MacText.decode+ toPathPiece = Mac.encode+ fromPathPiece = Mac.decode instance PathPiece IPv4 where- toPathPiece = IPv4Text.encode- fromPathPiece = IPv4Text.decode+ toPathPiece = IPv4.encode+ fromPathPiece = IPv4.decode
src/Yesod/Form/Net.hs view
@@ -2,47 +2,62 @@ {-# LANGUAGE OverloadedStrings #-} module Yesod.Form.Net ( ipv4Field+ , ipv4RangeField , macField , NetFormMessage(..) , englishNetFormMessage ) where +import Data.Text (Text)+import Net.Types (IPv4, IPv4Range, Mac) import Yesod.Core import Yesod.Form.Fields import Yesod.Form.Types-import Net.Types (IPv4, Mac)-import Data.Text (Text)+ import qualified Net.IPv4 as IPv4-import qualified Net.IPv4.Text as IPv4Text import qualified Net.Mac as Mac-import qualified Net.Mac.Text as MacText data NetFormMessage = MsgInvalidIPv4+ | MsgInvalidIPv4Range | MsgInvalidMac englishNetFormMessage :: NetFormMessage -> Text englishNetFormMessage x = case x of MsgInvalidIPv4 -> "Please enter an IPv4 address in dot decimal notation."+ MsgInvalidIPv4Range -> "Please enter an IPv4 range in CIDR notation." MsgInvalidMac -> "Please enter a valid MAC address." -ipv4Field :: ( Monad m- , RenderMessage (HandlerSite m) NetFormMessage- , RenderMessage (HandlerSite m) FormMessage- ) => Field m IPv4-ipv4Field = mapField IPv4Text.encode from textField+ipv4Field ::+ ( Monad m+ , RenderMessage (HandlerSite m) NetFormMessage+ , RenderMessage (HandlerSite m) FormMessage+ ) => Field m IPv4+ipv4Field = mapField IPv4.encode from textField where- from t = case IPv4Text.decode t of+ from t = case IPv4.decode t of Nothing -> Left (SomeMessage MsgInvalidIPv4) Just ipv4 -> Right ipv4 +ipv4RangeField ::+ ( Monad m+ , RenderMessage (HandlerSite m) NetFormMessage+ , RenderMessage (HandlerSite m) FormMessage+ ) => Field m IPv4Range+ipv4RangeField = mapField IPv4.encodeRange from textField+ where+ from t = case IPv4.decodeRange t of+ Nothing -> Left (SomeMessage MsgInvalidIPv4Range)+ Just r -> Right r++ macField :: ( Monad m , RenderMessage (HandlerSite m) NetFormMessage , RenderMessage (HandlerSite m) FormMessage ) => Field m Mac-macField = mapField MacText.encode from textField+macField = mapField Mac.encode from textField where- from t = case MacText.decode t of+ from t = case Mac.decode t of Nothing -> Left (SomeMessage MsgInvalidMac) Just mac -> Right mac
yesod-ip.cabal view
@@ -1,5 +1,5 @@ name: yesod-ip-version: 0.5.0+version: 0.5.1 synopsis: Code for using the ip package with yesod description: Please see README.md homepage: https://github.com/andrewthad/yesod-ip#readme@@ -23,13 +23,13 @@ Web.HttpApiData.Net build-depends: base >= 4.7 && < 5- , text- , yesod-core- , yesod-form- , persistent- , path-pieces- , http-api-data- , ip >= 0.8.1 && < 0.9+ , text >= 1.2+ , yesod-core >= 1.4 && < 1.7+ , yesod-form >= 1.4 && < 1.7+ , persistent >= 2.1+ , path-pieces >= 0.2 && < 0.3+ , http-api-data >= 0.3 && < 0.5+ , ip >= 1.4.1 && < 1.5 default-language: Haskell2010 source-repository head