From cc8e5a8955fb1f9d3c39074ac805674e443fe1b4 Mon Sep 17 00:00:00 2001 From: Lucy Cifferello <12953208+elvece@users.noreply.github.com> Date: Wed, 2 Aug 2023 17:20:42 -0400 Subject: [PATCH] parse empty device object as null --- src/Lib/Types/Manifest.hs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/Lib/Types/Manifest.hs b/src/Lib/Types/Manifest.hs index ec4331a..ecd3ff4 100644 --- a/src/Lib/Types/Manifest.hs +++ b/src/Lib/Types/Manifest.hs @@ -11,7 +11,7 @@ import Data.String.Interpolate.IsString (i) import Data.Text qualified as T import Lib.Types.Core (PkgId, OsArch) import Lib.Types.Emver (Version (..), VersionRange) -import Startlude (ByteString, Eq, Generic, Hashable, Maybe (..), Monad ((>>=)), Read, Show, Text, for, pure, readMaybe, ($), Int, (.), fmap, String) +import Startlude (ByteString, Eq, Generic, Hashable, Maybe (..), Monad ((>>=)), Read, Show, Text, for, pure, readMaybe, ($), Int, (.), fmap, String, null, (<$>), otherwise) import Data.Aeson ( eitherDecodeStrict, (.:), @@ -28,6 +28,7 @@ import Database.Persist.Class ( PersistField(..) ) import Data.Maybe (maybe) import qualified Data.ByteString as BS import Yesod.Persist (LiteralType(Escaped)) +import Data.Aeson.Types (Value(Object), Parser) data PackageManifest = PackageManifest @@ -65,11 +66,17 @@ instance FromJSON PackageManifest where let packageManifestAlerts = HM.fromList a packageManifestDependencies <- o .: "dependencies" packageManifestEosVersion <- o .: "eos-version" - packageHardwareDevice <- o .:? "hardware-requirements" >>= maybe (pure Nothing) (.:? "device") + packageHardwareDevice <- o .:? "hardware-requirements" >>= maybe (pure Nothing) (.:? "devices") >>= parsePackageDevice packageHardwareRam <- o .:? "hardware-requirements" >>= maybe (pure Nothing) (.:? "ram") packageHardwareArch <- o .:? "hardware-requirements" >>= maybe (pure Nothing) (.:? "arch") pure PackageManifest{..} +parsePackageDevice :: Maybe Value -> Parser (Maybe PackageDevice) +parsePackageDevice (Just (Object o)) + | null o = pure Nothing + | otherwise = Just . PackageDevice <$> parseJSON (Object o) +parsePackageDevice _ = pure Nothing + data PackageDependency = PackageDependency { packageDependencyOptional :: !(Maybe Text) , packageDependencyVersion :: !VersionRange