Skip to content

Commit

Permalink
[WIP] Fix #11: improve parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
yvan-sraka committed Jun 9, 2023
1 parent a938062 commit c5d918c
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 1 deletion.
19 changes: 18 additions & 1 deletion app/Foliage/Meta.hs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ where

import Control.Applicative ((<|>))
import Control.Monad (void)
import Control.Monad.State (modify)
import Data.HashMap.Strict qualified as HashMap
import Data.List (sortOn)
import Data.Maybe (fromMaybe)
import Data.Ord (Down (Down))
Expand Down Expand Up @@ -121,10 +123,25 @@ data PackageVersionSpec = PackageVersionSpec
deriving (Show, Eq, Generic)
deriving anyclass (Binary, Hashable, NFData)

matchMaybe :: forall a. Toml.TomlBiMap a Toml.AnyValue -> Toml.Key -> TomlCodec (Maybe a)
matchMaybe bimap@(Toml.BiMap {}) key = Toml.Codec input output
where
input :: Toml.TomlEnv (Maybe a)
input toml = case HashMap.lookup key (Toml.tomlPairs toml) of
Nothing -> pure Nothing
Just anyVal -> pure <$> Toml.whenLeftBiMapError key (Toml.backward bimap anyVal) pure

output :: Maybe a -> Toml.TomlState (Maybe a)
output Nothing = pure Nothing
output (Just a) = do
anyVal <- Toml.eitherToTomlState $ Toml.forward bimap a
Just a <$ modify (Toml.insertKeyAnyVal key anyVal)

sourceMetaCodec :: TomlCodec PackageVersionSpec
sourceMetaCodec =
PackageVersionSpec
<$> Toml.dioptional (timeCodec "timestamp")
-- TODO: unsure how to initialize Toml.BiMap ... with Toml._ZonedTime?
<$> matchMaybe Toml.BiMap {} "timestamp"
.= packageVersionTimestamp
<*> packageSourceCodec
.= packageVersionSource
Expand Down
2 changes: 2 additions & 0 deletions foliage.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ executable foliage
ed25519 >=0.0.5.0 && <0.1,
filepath >=1.4.2.1 && <1.5,
hackage-security >=0.6.2.1 && <0.7,
mtl,
network-uri >=2.6.4.1 && <2.7,
optparse-applicative >=0.17.0.0 && <0.18,
shake >=0.19.6 && <0.20,
Expand All @@ -65,6 +66,7 @@ executable foliage
time >=1.9.3 && <1.13,
time-compat >=1.9.6.1 && <1.10,
tomland >=1.3.3.1 && <1.4,
unordered-containers,
vector >=0.13.0.0 && <0.14,
with-utf8 >=1.0.2.3 && <1.1,
zlib >=0.6.2.3 && <0.7,

0 comments on commit c5d918c

Please sign in to comment.