safe-money-cereal 0.1 → 0.1.1
raw patch · 4 files changed
+27/−16 lines, 4 filesdep ~safe-moneyPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: safe-money
API changes (from Hackage documentation)
+ Money.Cereal: instance Data.Serialize.Serialize Money.Internal.Scale
Files
- changelog.md +7/−2
- safe-money-cereal.cabal +2/−2
- src/Money/Cereal.hs +16/−8
- test/Main.hs +2/−4
changelog.md view
@@ -1,4 +1,9 @@+# Version 0.1.1++* Require `safe-money>=0.8`.++ # Version 0.1 -* This first release of @safe-money-cereal@ includes the same @cereal@ support- and tests that were present in @safe-money-0.6@.+* This first release of `safe-money-cereal` includes the same `cereal` support+ and tests that were present in `safe-money-0.6`.
safe-money-cereal.cabal view
@@ -1,5 +1,5 @@ name: safe-money-cereal-version: 0.1+version: 0.1.1 license: BSD3 license-file: LICENSE copyright: Copyright (c) Renzo Carbonara 2016-2018@@ -33,7 +33,7 @@ build-depends: base (>=4.8 && <5.0), cereal,- safe-money+ safe-money >=0.8 exposed-modules: Money.Cereal
src/Money/Cereal.hs view
@@ -56,23 +56,31 @@ when (d == 0) (fail "denominator is zero") pure (MoneyI.mkSomeDense' c (n % d)) +instance Cereal.Serialize Money.Scale where+ put = \s -> do+ let r = Money.scaleToRational s+ Cereal.put (numerator r)+ Cereal.put (denominator r)+ get = maybe empty pure =<< do+ -- We go through String for backwards compatibility.+ n :: Integer <- Cereal.get+ d :: Integer <- Cereal.get+ when (d == 0) (fail "denominator is zero")+ pure (Money.scaleFromRational (n % d))+ -- | Compatible with 'Money.Discrete'. instance Cereal.Serialize Money.SomeDiscrete where put = \sd -> do -- We go through String for backwards compatibility. Cereal.put (MoneyI.someDiscreteCurrency' sd)- let r = Money.someDiscreteScale sd- Cereal.put (numerator r)- Cereal.put (denominator r)+ Cereal.put (Money.someDiscreteScale sd) Cereal.put (Money.someDiscreteAmount sd)- get = maybe empty pure =<< do+ get = do -- We go through String for backwards compatibility. c :: String <- Cereal.get- n :: Integer <- Cereal.get- d :: Integer <- Cereal.get- when (d == 0) (fail "denominator is zero")+ s :: Money.Scale <- Cereal.get a :: Integer <- Cereal.get- pure (MoneyI.mkSomeDiscrete' c (n % d) a)+ pure (MoneyI.mkSomeDiscrete' c s a) -- | Compatible with 'Money.ExchangeRate'. instance Cereal.Serialize Money.SomeExchangeRate where
test/Main.hs view
@@ -57,10 +57,8 @@ testCurrencyUnits :: Tasty.TestTree testCurrencyUnits = Tasty.testGroup "Currency units"- [ testDiscrete (Proxy :: Proxy "BTC") (Proxy :: Proxy "BTC")- , testDiscrete (Proxy :: Proxy "BTC") (Proxy :: Proxy "satoshi")+ [ testDiscrete (Proxy :: Proxy "BTC") (Proxy :: Proxy "satoshi") , testDiscrete (Proxy :: Proxy "BTC") (Proxy :: Proxy "bitcoin")- , testDiscrete (Proxy :: Proxy "USD") (Proxy :: Proxy "USD") , testDiscrete (Proxy :: Proxy "USD") (Proxy :: Proxy "cent") , testDiscrete (Proxy :: Proxy "USD") (Proxy :: Proxy "dollar") , testDiscrete (Proxy :: Proxy "VUV") (Proxy :: Proxy "vatu")@@ -115,7 +113,7 @@ testDiscrete :: forall (currency :: Symbol) (unit :: Symbol)- . ( Money.GoodScale (Money.Scale currency unit)+ . ( Money.GoodScale (Money.UnitScale currency unit) , KnownSymbol currency , KnownSymbol unit ) => Proxy currency