mu-graphql 0.5.0.0 → 0.5.0.1
raw patch · 2 files changed
+39/−31 lines, 2 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- mu-graphql.cabal +1/−1
- src/Mu/GraphQL/Query/Parse.hs +38/−30
mu-graphql.cabal view
@@ -1,5 +1,5 @@ name: mu-graphql-version: 0.5.0.0+version: 0.5.0.1 synopsis: GraphQL support for Mu description: GraphQL servers and clients for Mu-Haskell cabal-version: >=1.10
src/Mu/GraphQL/Query/Parse.hs view
@@ -6,6 +6,7 @@ {-# language OverloadedStrings #-} {-# language PolyKinds #-} {-# language ScopedTypeVariables #-}+{-# language TupleSections #-} {-# language TypeApplications #-} {-# language TypeOperators #-} {-# language UndecidableInstances #-}@@ -659,52 +660,59 @@ instance ValueParser sch 'TNull where valueParser _ _ GQL.Null = pure FNull- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive Bool) where valueParser _ _ (GQL.Boolean b) = pure $ FPrimitive b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive Int32) where valueParser _ _ (GQL.Int b) = pure $ FPrimitive $ fromIntegral b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive Integer) where valueParser _ _ (GQL.Int b) = pure $ FPrimitive $ toInteger b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive Scientific) where valueParser _ _ (GQL.Float b) = pure $ FPrimitive $ fromFloatDigits b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive Double) where valueParser _ _ (GQL.Float b) = pure $ FPrimitive b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive T.Text) where- valueParser _ _ (GQL.String b)- = pure $ FPrimitive b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ _ (GQL.String b) = pure $ FPrimitive b+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance ValueParser sch ('TPrimitive String) where- valueParser _ _ (GQL.String b)- = pure $ FPrimitive $ T.unpack b- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser _ _ (GQL.String b) = pure $ FPrimitive $ T.unpack b+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance (ValueParser sch r) => ValueParser sch ('TList r) where- valueParser vmap fname (GQL.List xs)- = FList <$> traverse (valueParser' vmap fname) xs- valueParser _ fname _- = throwError $ "field '" <> fname <> "' was not of right type"+ valueParser vmap fname (GQL.List xs) = FList <$> traverse (valueParser' vmap fname) xs+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type" instance (ValueParser sch r) => ValueParser sch ('TOption r) where- valueParser _ _ GQL.Null- = pure $ FOption Nothing- valueParser vmap fname v- = FOption . Just <$> valueParser' vmap fname v+ valueParser _ _ GQL.Null = pure $ FOption Nothing+ valueParser vmap fname v = FOption . Just <$> valueParser' vmap fname v instance (ObjectOrEnumParser sch (sch :/: sty), KnownName sty) => ValueParser sch ('TSchematic sty) where- valueParser vmap _ v- = FSchematic <$> parseObjectOrEnum' vmap (T.pack $ nameVal (Proxy @sty)) v+ valueParser vmap _ v = FSchematic <$> parseObjectOrEnum' vmap (T.pack $ nameVal (Proxy @sty)) v+instance ValueParser sch ('TPrimitive A.Value) where+ valueParser vmap _ x = FPrimitive <$> toAesonValue vmap x+instance ValueParser sch ('TPrimitive A.Object) where+ valueParser vm _ (GQL.Object xs) = FPrimitive . HM.fromList <$> traverse (toKeyValuePairs vm) xs+ valueParser _ fname _ = throwError $ "field '" <> fname <> "' was not of right type"++toKeyValuePairs :: MonadError T.Text m => VariableMap -> GQL.ObjectField GQL.Value -> m (T.Text, A.Value)+toKeyValuePairs vmap (GQL.ObjectField key (GQL.Node v _) _) = (key,) <$> toAesonValue vmap v++toAesonValue :: MonadError T.Text m => VariableMap -> GQL.Value -> m A.Value+toAesonValue vm (GQL.Variable v) =+ case HM.lookup v vm of+ Nothing -> throwError $ "variable '" <> v <> "' was not found"+ Just xs -> toAesonValue vm xs+toAesonValue _ (GQL.Int n) = pure . A.Number $ fromIntegral n+toAesonValue _ (GQL.Float d) = pure . A.Number $ fromFloatDigits d+toAesonValue _ (GQL.String s) = pure $ A.String s+toAesonValue _ (GQL.Boolean b) = pure $ A.Bool b+toAesonValue _ GQL.Null = pure A.Null+toAesonValue _ (GQL.Enum e) = pure $ A.String e+toAesonValue vm (GQL.List xs) = A.toJSON <$> traverse (toAesonValue vm) xs+toAesonValue vm (GQL.Object xs) = A.Object . HM.fromList <$> traverse (toKeyValuePairs vm) xs class ParseDifferentReturn (p :: Package') (r :: Return Symbol (TypeRef Symbol)) where parseDiffReturn :: MonadError T.Text f