forked from OSS/graphql
		
	Initial support for aliases in execute
				
					
				
			This commit is contained in:
		@@ -11,6 +11,7 @@ import Data.Maybe (catMaybes)
 | 
			
		||||
 | 
			
		||||
import qualified Data.Aeson as Aeson
 | 
			
		||||
import qualified Data.HashMap.Strict as HashMap
 | 
			
		||||
import qualified Data.Text as T
 | 
			
		||||
 | 
			
		||||
import Data.GraphQL.AST
 | 
			
		||||
import Data.GraphQL.Schema (Resolver, Schema(..))
 | 
			
		||||
@@ -28,8 +29,10 @@ selectionSet :: Alternative f => Schema.Subs -> Resolver f -> SelectionSet -> f
 | 
			
		||||
selectionSet f resolv = fmap (Aeson.Object . fold) . traverse (selection f resolv)
 | 
			
		||||
 | 
			
		||||
selection :: Alternative f => Schema.Subs -> Resolver f -> Selection -> f Aeson.Object
 | 
			
		||||
selection f resolv (SelectionField field@(Field _ name _ _ _)) =
 | 
			
		||||
    fmap (HashMap.singleton name) $ Aeson.toJSON <$> resolv (fieldToInput f field)
 | 
			
		||||
selection f resolv (SelectionField field@(Field alias name _ _ _)) =
 | 
			
		||||
    fmap (HashMap.singleton aliasOrName) $ Aeson.toJSON <$> resolv (fieldToInput f field)
 | 
			
		||||
  where
 | 
			
		||||
    aliasOrName = if T.null alias then name else alias
 | 
			
		||||
selection _ _ _ = empty
 | 
			
		||||
 | 
			
		||||
-- * AST/Schema conversions
 | 
			
		||||
 
 | 
			
		||||
@@ -165,4 +165,34 @@ test = testGroup "Star Wars Query Tests"
 | 
			
		||||
    --         }
 | 
			
		||||
    --     |]
 | 
			
		||||
    --   $ object ["human" .= Aeson.Null]
 | 
			
		||||
    , testCase "Luke with alias" . testQuery
 | 
			
		||||
        [r| query FetchLukeAliased {
 | 
			
		||||
              luke: human(id: "1000") {
 | 
			
		||||
                name
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
        |]
 | 
			
		||||
      $ object [
 | 
			
		||||
         "luke" .= object [
 | 
			
		||||
           "name" .= ("Luke Skywalker" :: Text)
 | 
			
		||||
           ]
 | 
			
		||||
        ]
 | 
			
		||||
    , testCase "Luke and Leia aliased" . testQuery
 | 
			
		||||
        [r| query FetchLukeAndLeiaAliased {
 | 
			
		||||
              luke: human(id: "1000") {
 | 
			
		||||
                name
 | 
			
		||||
              }
 | 
			
		||||
              leia: human(id: "1003") {
 | 
			
		||||
                name
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
        |]
 | 
			
		||||
      $ object [
 | 
			
		||||
          "luke" .= object [
 | 
			
		||||
            "name" .= ("Luke Skywalker" :: Text)
 | 
			
		||||
           ]
 | 
			
		||||
        , "leia" .= object [
 | 
			
		||||
            "name" .= ("Leia Organa" :: Text)
 | 
			
		||||
           ]
 | 
			
		||||
        ]
 | 
			
		||||
  ]
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user