module Data.ULID.TimeStamp (
ULIDTimeStamp,
mkULIDTimeStamp,
getULIDTimeStamp
) where
import Data.Time.Clock
import Data.Time.Clock.POSIX
import Data.ULID.Crockford
newtype ULIDTimeStamp = ULIDTimeStamp Integer
deriving (Eq, Ord)
mkULIDTimeStamp :: POSIXTime
-> ULIDTimeStamp
mkULIDTimeStamp = ULIDTimeStamp . round . (*1000)
getULIDTimeStamp :: IO ULIDTimeStamp
getULIDTimeStamp = mkULIDTimeStamp <$> getPOSIXTime
instance Show ULIDTimeStamp where
show (ULIDTimeStamp i) = encode 10 i
instance Read ULIDTimeStamp where
readsPrec _ = map (\(c,r)->(ULIDTimeStamp c, r)) . decode 10