45 lines
1016 B
Haskell
45 lines
1016 B
Haskell
{-# OPTIONS_GHC -fno-warn-orphans #-}
|
|
|
|
module Data.Time.Clock.Instances
|
|
(
|
|
) where
|
|
|
|
import ClassyPrelude
|
|
|
|
import Database.Persist.Sql
|
|
|
|
import Data.Proxy
|
|
|
|
import Data.Binary (Binary)
|
|
import qualified Data.Binary as Binary
|
|
|
|
import Data.Time.Clock
|
|
import Data.Time.Calendar.Instances ()
|
|
import Web.PathPieces
|
|
|
|
|
|
instance Hashable DiffTime where
|
|
hashWithSalt s = hashWithSalt s . toRational
|
|
|
|
instance PersistField NominalDiffTime where
|
|
toPersistValue = toPersistValue . toRational
|
|
fromPersistValue = fmap fromRational . fromPersistValue
|
|
|
|
instance PersistFieldSql NominalDiffTime where
|
|
sqlType _ = sqlType (Proxy @Rational)
|
|
|
|
|
|
deriving instance Generic UTCTime
|
|
instance Hashable UTCTime
|
|
|
|
instance PathPiece UTCTime where
|
|
toPathPiece = pack . formatTime defaultTimeLocale "%0Y-%m-%dT%H:%M:%S%Q%z"
|
|
fromPathPiece = parseTimeM False defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Q%z" . unpack
|
|
|
|
|
|
instance Binary DiffTime where
|
|
get = fromRational <$> Binary.get
|
|
put = Binary.put . toRational
|
|
|
|
instance Binary UTCTime
|