fix toJson instances for hashmap keys

This commit is contained in:
Lucy Cifferello
2021-07-05 17:18:40 -04:00
committed by Keagan McClelland
parent aab1856c6c
commit 1c069ca6f8
2 changed files with 17 additions and 7 deletions

View File

@@ -20,7 +20,6 @@ import Data.List
import Lib.Types.Category import Lib.Types.Category
import Lib.Types.AppIndex import Lib.Types.AppIndex
import qualified Data.HashMap.Strict as HM import qualified Data.HashMap.Strict as HM
import Data.HashMap.Strict (HashMap)
import Lib.Types.Emver import Lib.Types.Emver
import qualified Data.List.NonEmpty as NE import qualified Data.List.NonEmpty as NE
import Database.Esqueleto.Experimental import Database.Esqueleto.Experimental
@@ -50,9 +49,14 @@ data ServiceRes = ServiceRes
, serviceResManifest :: ServiceManifest , serviceResManifest :: ServiceManifest
, serviceResCategories :: [CategoryTitle] , serviceResCategories :: [CategoryTitle]
, serviceResVersions :: [Version] , serviceResVersions :: [Version]
, serviceResDependencyInfo :: HashMap AppIdentifier DependencyInfo , serviceResDependencyInfo :: HM.HashMap AppIdentifier DependencyInfo
, serviceResReleaseNotes :: HashMap Version Text , serviceResReleaseNotes :: HM.HashMap Version Text
} deriving (Show) } deriving (Show, Generic)
-- newtype ReleaseNotes = ReleaseNotes (HM.HashMap Version Text)
-- deriving(Eq, Show)
-- instance ToJSON ReleaseNotes where
-- toJSON kvs = object [ t .= v | (k,v) <- kvs, let (String t) = toJSON k ]
instance ToJSON ServiceRes where instance ToJSON ServiceRes where
toJSON ServiceRes {..} = object toJSON ServiceRes {..} = object
[ "icon" .= serviceResIcon [ "icon" .= serviceResIcon
@@ -60,8 +64,14 @@ instance ToJSON ServiceRes where
, "categories" .= serviceResCategories , "categories" .= serviceResCategories
, "versions" .= serviceResVersions , "versions" .= serviceResVersions
, "dependency-metadata" .= serviceResDependencyInfo , "dependency-metadata" .= serviceResDependencyInfo
, "release-notes" .= serviceResReleaseNotes , "release-notes" .= object [ t .= v | (k,v) <- HM.toList serviceResReleaseNotes, let (String t) = toJSON k ]
] ]
-- >>> encode hm
-- "{\"0.2.0\":\"some notes\"}"
hm :: Data.Aeson.Value
hm = do
object [ t .= v | (k,v) <- [("0.2.0", "some notes") :: (Version, Text)], let (String t) = toJSON k ]
instance ToContent ServiceRes where instance ToContent ServiceRes where
toContent = toContent . toJSON toContent = toContent . toJSON
instance ToTypedContent ServiceRes where instance ToTypedContent ServiceRes where
@@ -240,7 +250,7 @@ decodeIcon appmgrPath depPath e@(Extension icon) = do
sendResponseStatus status400 e' sendResponseStatus status400 e'
Right (i' :: URL) -> pure $ i' <> T.pack icon Right (i' :: URL) -> pure $ i' <> T.pack icon
fetchAllAppVersions :: Key SApp -> HandlerFor RegistryCtx ([VersionInfo], HashMap Version Text) fetchAllAppVersions :: Key SApp -> HandlerFor RegistryCtx ([VersionInfo], HM.HashMap Version Text)
fetchAllAppVersions appId = do fetchAllAppVersions appId = do
entityAppVersions <- runDB $ P.selectList [SVersionAppId P.==. appId] [] -- orderby version entityAppVersions <- runDB $ P.selectList [SVersionAppId P.==. appId] [] -- orderby version
let vers = entityVal <$> entityAppVersions let vers = entityVal <$> entityAppVersions

View File

@@ -197,7 +197,7 @@ instance ToJSON ServiceManifest where
, "version" .= serviceManifestVersion , "version" .= serviceManifestVersion
, "description" .= object ["short" .= serviceManifestDescriptionShort, "long" .= serviceManifestDescriptionLong] , "description" .= object ["short" .= serviceManifestDescriptionShort, "long" .= serviceManifestDescriptionLong]
, "release-notes" .= serviceManifestReleaseNotes , "release-notes" .= serviceManifestReleaseNotes
, "alerts" .= serviceManifestAlerts , "alerts" .= object [ t .= v | (k,v) <- HM.toList serviceManifestAlerts, let (String t) = toJSON k ]
, "dependencies" .= serviceManifestDependencies , "dependencies" .= serviceManifestDependencies
] ]