module Data.API.Utils
( mkUTC
, mkUTC'
, mkUTC_
, parseUTC'
, parseUTC_
, (?!)
, (?!?)
) where
import Data.Aeson
import Data.Maybe
import qualified Data.Text as T
import Data.Time
import System.Locale
mkUTC :: UTCTime -> Value
mkUTC = String . mkUTC'
utcFormat :: String
utcFormat = "%Y-%m-%dT%H:%M:%SZ"
utcFormats :: [String]
utcFormats =
[ "%Y-%m-%dT%H:%M:%S%z"
, "%Y-%m-%dT%H:%M:%S%Z"
, "%Y-%m-%dT%H:%M%Z"
, "%Y-%m-%dT%H:%M:%S%QZ"
, utcFormat
]
mkUTC' :: UTCTime -> T.Text
mkUTC' = T.pack . mkUTC_
mkUTC_ :: UTCTime -> String
mkUTC_ utct = formatTime defaultTimeLocale utcFormat utct
parseUTC' :: T.Text -> Maybe UTCTime
parseUTC' t = parseUTC_ $ T.unpack t
parseUTC_ :: String -> Maybe UTCTime
parseUTC_ s = listToMaybe $ catMaybes $
map (\fmt->parseTime defaultTimeLocale fmt s) utcFormats
(?!) :: Maybe a -> e -> Either e a
Nothing ?! e = Left e
Just x ?! _ = Right x
(?!?) :: Either e a -> (e -> e') -> Either e' a
Left e ?!? f = Left (f e)
Right x ?!? _ = Right x