@@ -1,4 +1,4 @@
1−{-# LANGUAGE BangPatterns, ScopedTypeVariables, CPP #-}
1+{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
4-- Module: Data.Aeson.Parser.Time
4-- Module: Data.Aeson.Parser.Time
@@ -22,6 +22,7 @@ module Data.Aeson.Parser.Time
23import Control.Applicative ((<$>), (<*>), (<*), (*>))
23import Control.Applicative ((<$>), (<*>), (<*), (*>))
24import Control.Monad (when, void)
24import Control.Monad (when, void)
25+import Data.Aeson.Functions (toPico)
25import Data.Attoparsec.Text as A
26import Data.Attoparsec.Text as A
26import Data.Bits ((.&.))
27import Data.Bits ((.&.))
27import Data.Char (isDigit, ord)
28import Data.Char (isDigit, ord)
@@ -35,22 +36,6 @@ import qualified Data.Aeson.Types.Internal as Aeson
35import qualified Data.Text as T
36import qualified Data.Text as T
36import qualified Data.Time.LocalTime as Local
37import qualified Data.Time.LocalTime as Local
38−#if MIN_VERSION_base(4,7,0)
40−import Data.Fixed (Fixed(MkFixed))
42−mkPico :: Integer -> Pico
49−mkPico :: Integer -> Pico
54-- | Run an attoparsec parser as an aeson parser.
39-- | Run an attoparsec parser as an aeson parser.
55run :: Parser a -> Text -> Aeson.Parser a
40run :: Parser a -> Text -> Aeson.Parser a
56run p t = case A.parseOnly (p <* endOfInput) t of
41run p t = case A.parseOnly (p <* endOfInput) t of
@@ -97,7 +82,7 @@ seconds = do
97 return $! parsePicos real t
82 return $! parsePicos real t
98 _ -> return $! fromIntegral real
83 _ -> return $! fromIntegral real
100− parsePicos a0 t = mkPico (fromIntegral (t' * 10^n))
85+ parsePicos a0 t = toPico (fromIntegral (t' * 10^n))
101 where T n t' = T.foldl' step (T 12 (fromIntegral a0)) t
86 where T n t' = T.foldl' step (T 12 (fromIntegral a0)) t
102 step ma@(T m a) c
87 step ma@(T m a) c
103 | m <= 0 = ma
88 | m <= 0 = ma