git.iko.soy/rowtype-yoga/purescript-yoga-json
on main help sign in
Instances for Durations (#17)
commitbdb2316df632a56e4dd0b6eecaa268ece48e2a85 authorMark Eibes <mark.eibes@gmail.com> dateWed 23 Nov 2022, 17:16 (4 years ago) parentf213e33
2 files changed+48−1
src/Yoga/JSON.purs+25−1 test/BasicsSpec.purs+23
src/Yoga/JSON.purs+25−1
@@ -57,7 +57,7 @@ import Data.Number as Number
5757import Data.String.NonEmpty.Internal (NonEmptyString)
5858import Data.String.NonEmpty.Internal as NonEmptyString
5959import Data.Symbol (class IsSymbol, reflectSymbol)
60−import Data.Time.Duration (Milliseconds(..))
60+import Data.Time.Duration (Days(..), Hours(..), Milliseconds(..), Minutes(..), Seconds(..))
6161import Data.Traversable (traverse)
6262import Data.Tuple (Tuple(..))
6363import Data.Variant (Variant, inj, on)
@@ -591,6 +591,30 @@ instance WriteForeign Milliseconds where
591591instance ReadForeign Milliseconds where
592592 readImpl = readImpl >>> map wrap
593593
594+instance WriteForeign Seconds where
595+ writeImpl = unwrap >>> writeImpl
596+
597+instance ReadForeign Seconds where
598+ readImpl = readImpl >>> map wrap
599+
600+instance WriteForeign Minutes where
601+ writeImpl = unwrap >>> writeImpl
602+
603+instance ReadForeign Minutes where
604+ readImpl = readImpl >>> map wrap
605+
606+instance WriteForeign Hours where
607+ writeImpl = unwrap >>> writeImpl
608+
609+instance ReadForeign Hours where
610+ readImpl = readImpl >>> map wrap
611+
612+instance WriteForeign Days where
613+ writeImpl = unwrap >>> writeImpl
614+
615+instance ReadForeign Days where
616+ readImpl = readImpl >>> map wrap
617+
594618unsafeStringToInt ∷ String → Int
595619unsafeStringToInt = Int.fromString >>>
596620 (fromMaybe' \_ → unsafeCrashWith "impossible")
test/BasicsSpec.purs+23
@@ -13,6 +13,7 @@ import Data.Maybe (Maybe(..), fromJust, fromMaybe')
1313import Data.Newtype (class Newtype, un)
1414import Data.Nullable as Nullable
1515import Data.String.NonEmpty (NonEmptyString, nes)
16+import Data.Time.Duration (Days(..), Hours(..), Milliseconds(..), Minutes(..), Seconds(..))
1617import Data.Tuple (Tuple(..))
1718import Data.Tuple.Nested ((/\))
1819import Data.Variant (Variant, inj)
@@ -105,6 +106,28 @@ spec = describe "En- and decoding" $ do
105106 let expected = show "2022-01-01T00:00:00.000Z"
106107 result `shouldEqual` expected
107108
109+ describe "works with Durations" do
110+ it "roundtrips" do
111+ let millis = Milliseconds 16.67
112+ roundtrips millis
113+ writeJSON millis `shouldEqual` "16.67"
114+
115+ let seconds = Seconds 60.0
116+ roundtrips seconds
117+ writeJSON seconds `shouldEqual` "60"
118+
119+ let minutes = Minutes 10.0
120+ roundtrips minutes
121+ writeJSON minutes `shouldEqual` "10"
122+
123+ let hours = Hours 24.0
124+ roundtrips hours
125+ writeJSON hours `shouldEqual` "24"
126+
127+ let days = Days 365.0
128+ roundtrips days
129+ writeJSON days `shouldEqual` "365"
130+
108131 describe "works on record types" do
109132 it "roundtrips" do
110133 roundtrips { a: 12, b: "54" }