aeson-iproute 0.1.1 → 0.1.2
raw patch · 2 files changed
+52/−2 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
- Data.Aeson.IP: instance Data.Aeson.Types.Class.FromJSON Data.IP.Addr.IP
- Data.Aeson.IP: instance Data.Aeson.Types.Class.FromJSON Data.IP.Addr.IPv4
- Data.Aeson.IP: instance Data.Aeson.Types.Class.FromJSON Data.IP.Addr.IPv6
- Data.Aeson.IP: instance Data.Aeson.Types.Class.FromJSON Data.IP.Range.IPRange
- Data.Aeson.IP: instance Data.Aeson.Types.Class.ToJSON Data.IP.Addr.IP
- Data.Aeson.IP: instance Data.Aeson.Types.Class.ToJSON Data.IP.Addr.IPv4
- Data.Aeson.IP: instance Data.Aeson.Types.Class.ToJSON Data.IP.Addr.IPv6
- Data.Aeson.IP: instance Data.Aeson.Types.Class.ToJSON Data.IP.Range.IPRange
- Data.Aeson.IP: instance GHC.Read.Read (Data.IP.Range.AddrRange a) => Data.Aeson.Types.Class.FromJSON (Data.IP.Range.AddrRange a)
- Data.Aeson.IP: instance GHC.Show.Show (Data.IP.Range.AddrRange a) => Data.Aeson.Types.Class.ToJSON (Data.IP.Range.AddrRange a)
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Addr.IP
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Addr.IPv4
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Addr.IPv6
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSON Data.IP.Range.IPRange
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSONKey Data.IP.Addr.IP
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSONKey Data.IP.Addr.IPv4
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSONKey Data.IP.Addr.IPv6
+ Data.Aeson.IP: instance Data.Aeson.Types.FromJSON.FromJSONKey Data.IP.Range.IPRange
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSON Data.IP.Addr.IP
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSON Data.IP.Addr.IPv4
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSON Data.IP.Addr.IPv6
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSON Data.IP.Range.IPRange
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSONKey Data.IP.Addr.IP
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSONKey Data.IP.Addr.IPv4
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSONKey Data.IP.Addr.IPv6
+ Data.Aeson.IP: instance Data.Aeson.Types.ToJSON.ToJSONKey Data.IP.Range.IPRange
+ Data.Aeson.IP: instance GHC.Read.Read (Data.IP.Range.AddrRange a) => Data.Aeson.Types.FromJSON.FromJSON (Data.IP.Range.AddrRange a)
+ Data.Aeson.IP: instance GHC.Read.Read (Data.IP.Range.AddrRange a) => Data.Aeson.Types.FromJSON.FromJSONKey (Data.IP.Range.AddrRange a)
+ Data.Aeson.IP: instance GHC.Show.Show a => Data.Aeson.Types.ToJSON.ToJSON (Data.IP.Range.AddrRange a)
+ Data.Aeson.IP: instance GHC.Show.Show a => Data.Aeson.Types.ToJSON.ToJSONKey (Data.IP.Range.AddrRange a)
Files
- Data/Aeson/IP.hs +45/−1
- aeson-iproute.cabal +7/−1
Data/Aeson/IP.hs view
@@ -19,34 +19,61 @@ | otherwise = fail "Unable to parse" parseJSON v = typeMismatch "IPv4" v +instance FromJSONKey IPv4 where+ fromJSONKey = FromJSONKeyTextParser $ \t ->+ case readMaybe (Text.unpack t) of+ Just r -> pure r+ Nothing -> fail "Unable to parse IPv4"+ instance ToJSON IPv4 where toJSON = String . Text.pack . show +instance ToJSONKey IPv4 where+ toJSONKey = toJSONKeyText (Text.pack . show)+ instance FromJSON IPv6 where parseJSON (String s) | Just r <- readMaybe (Text.unpack s) = pure r | otherwise = fail "Unable to parse" parseJSON v = typeMismatch "IPv6" v +instance FromJSONKey IPv6 where+ fromJSONKey = FromJSONKeyTextParser $ \t ->+ case readMaybe (Text.unpack t) of+ Just r -> pure r+ Nothing -> fail "Unable to parse IPv6"+ instance ToJSON IPv6 where toJSON = String . Text.pack . show +instance ToJSONKey IPv6 where+ toJSONKey = toJSONKeyText (Text.pack . show)+ instance FromJSON IP where parseJSON (String s) | Just r <- readMaybe (Text.unpack s) = pure r | otherwise = fail "Unable to parse" parseJSON v = typeMismatch "IP" v +instance FromJSONKey IP where+ fromJSONKey = FromJSONKeyTextParser $ \t ->+ case readMaybe (Text.unpack t) of+ Just r -> pure r+ Nothing -> fail "Unable to parse IP"+ instance ToJSON IP where toJSON = String . Text.pack . show +instance ToJSONKey IP where+ toJSONKey = toJSONKeyText (Text.pack . show)+ instance Read (AddrRange a) => FromJSON (AddrRange a) where parseJSON (String s) | Just r <- readMaybe (Text.unpack s) = pure r | otherwise = fail "Unable to parse" parseJSON v = typeMismatch "AddrRange" v -instance Show (AddrRange a) => ToJSON (AddrRange a) where+instance Show a => ToJSON (AddrRange a) where toJSON = String . Text.pack . show instance FromJSON IPRange where@@ -58,3 +85,20 @@ instance ToJSON IPRange where toJSON = String . Text.pack . show +instance Read (AddrRange a) => FromJSONKey (AddrRange a) where+ fromJSONKey = FromJSONKeyTextParser $ \t ->+ case readMaybe (Text.unpack t) of+ Just r -> pure r+ Nothing -> fail "Unable to parse AddrRange"++instance Show a => ToJSONKey (AddrRange a) where+ toJSONKey = toJSONKeyText (Text.pack . show)++instance FromJSONKey IPRange where+ fromJSONKey = FromJSONKeyTextParser $ \t ->+ case readMaybe (Text.unpack t) of+ Just r -> pure r+ Nothing -> fail "Unable to parse IPRange"++instance ToJSONKey IPRange where+ toJSONKey = toJSONKeyText (Text.pack . show)
aeson-iproute.cabal view
@@ -2,8 +2,9 @@ -- documentation, see http://haskell.org/cabal/users-guide/ name: aeson-iproute-version: 0.1.1+version: 0.1.2 synopsis: Aeson instances for iproute types+description: Aeson instances for iproute types. license: BSD3 license-file: LICENSE author: Lana Black@@ -12,6 +13,7 @@ category: Data build-type: Simple cabal-version: >=1.10+Tested-With: GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2 library exposed-modules: Data.Aeson.IP@@ -23,3 +25,7 @@ default-language: Haskell2010 ghc-options: -Wall -fno-warn-orphans++source-repository head+ type: git+ location: https://github.com/greydot/aeson-iproute.git