@@ -34,6 +34,7 @@ import Data.Scientific (Scientific)
3434import qualified Data.Scientific as Sci
3535import Data.Text (Text)
3636import qualified Data.Text as Text
37+import qualified Data.Text.Lazy as LText
3738import qualified Data.Text.Lazy.Builder as Build
3839import qualified Data.Text.Lazy.Builder.Scientific as Sci
3940import Data.Time
@@ -77,21 +78,26 @@ _DateTime = iso unDateTime DateTime'
7778--
7879-- /Example/: @"3.5s"@.
7980newtype Duration = Duration { unDuration :: Scientific }
80− deriving (Eq, Ord, Show, Generic, Data, Typeable)
81+ deriving (Eq, Ord, Show, Read, Generic, Data, Typeable)
8182
8283_Duration :: Iso' Duration Scientific
8384_Duration = iso unDuration Duration
8485
85−instance ToJSON Time' where toJSON = String . toQueryParam
86−instance ToJSON Date' where toJSON = String . toQueryParam
87−instance ToJSON DateTime' where toJSON = toJSON . unDateTime
88−
89−instance ToJSON Duration where
90− toJSON = toJSON
86+instance ToHttpApiData Duration where
87+ toQueryParam =
88+ LText.toStrict
9189 . Build.toLazyText
9290 . Sci.formatScientificBuilder Sci.Fixed (Just 9)
9391 . unDuration
9492
93+instance FromHttpApiData Duration where
94+ parseQueryParam = second Duration . parseText durationParser
95+
96+instance ToJSON Time' where toJSON = String . toQueryParam
97+instance ToJSON Date' where toJSON = String . toQueryParam
98+instance ToJSON DateTime' where toJSON = toJSON . unDateTime
99+instance ToJSON Duration where toJSON = String . toQueryParam
100+
95101instance FromJSON Time' where
96102 parseJSON = fmap Time' . withText "time" (run timeParser)
97103