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 =