From 63fc5fae5d7568ed37a45e9f7380f60d2dcf7ef0 Mon Sep 17 00:00:00 2001 From: Yvan Sraka Date: Wed, 26 Apr 2023 16:26:46 +0200 Subject: [PATCH] [WIP] Fix #11: improve parsing --- app/Foliage/Meta.hs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/Foliage/Meta.hs b/app/Foliage/Meta.hs index 7130367..c5dd8ca 100644 --- a/app/Foliage/Meta.hs +++ b/app/Foliage/Meta.hs @@ -41,7 +41,7 @@ import Data.Maybe (fromMaybe) import Data.Ord (Down (Down)) import Data.Text (Text) import Data.Text qualified as T -import Data.Time.LocalTime (utc, utcToZonedTime, zonedTimeToUTC) +import Data.Time.Format (defaultTimeLocale, formatTime, parseTimeM) import Development.Shake.Classes (Binary, Hashable, NFData) import Distribution.Aeson () import Distribution.Parsec (simpleParsec) @@ -214,7 +214,12 @@ revisionMetaCodec = .= revisionNumber timeCodec :: Toml.Key -> TomlCodec UTCTime -timeCodec key = Toml.dimap (utcToZonedTime utc) zonedTimeToUTC $ Toml.zonedTime key +timeCodec = Toml.textBy showTime parseTime + where + showTime = T.pack . formatTime defaultTimeLocale "%FT%T%QZ" + parseTime t = case parseTimeM True defaultTimeLocale "%FT%T%QZ" (T.unpack $ T.dropAround (`elem` ['\'', '\"']) t) of + Nothing -> Left $ "Invalid timestamp format, expected 'YYYY-MM-DDTHH:MM:SSZ': " <> t + Just time -> Right time latestRevisionNumber :: PackageVersionSpec -> Maybe Int latestRevisionNumber sm =