module Hasura.SQL.Time ( ZonedTimeOfDay(..) ) where import Data.Attoparsec.Text as A import Data.Attoparsec.Time (timeOfDay, timeZone) import Data.Maybe (fromMaybe) import Hasura.Prelude import qualified Data.Aeson.Types as Aeson import qualified Data.Text as T import qualified Data.Time.LocalTime as Local data ZonedTimeOfDay = ZonedTimeOfDay { ztodTime :: Local.TimeOfDay , ztodZone :: Local.TimeZone } deriving (Show, Eq) utc :: Local.TimeZone utc = Local.TimeZone 0 False "" zonedTimeOfDay :: T.Text -> Aeson.Parser ZonedTimeOfDay zonedTimeOfDay t = case A.parseOnly (p <* endOfInput) t of Left err -> fail $ "could not parse timetz: " ++ err Right r -> return r where p = ZonedTimeOfDay <$> timeOfDay <*> (fromMaybe utc <$> timeZone) instance Aeson.FromJSON ZonedTimeOfDay where parseJSON (Aeson.String t) = zonedTimeOfDay t parseJSON _ = fail "Expecting a string for timetz"