waddap
This commit is contained in:
commit
40dea5111a
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.stack-work/
|
||||||
|
gql2hs.cabal
|
||||||
|
*~
|
3
ChangeLog.md
Normal file
3
ChangeLog.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Changelog for gql2hs
|
||||||
|
|
||||||
|
## Unreleased changes
|
30
LICENSE
Normal file
30
LICENSE
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
Copyright Frederik Hanghøj Iversen (c) 2019
|
||||||
|
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following
|
||||||
|
disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of Frederik Hanghøj Iversen nor the names of other
|
||||||
|
contributors may be used to endorse or promote products derived
|
||||||
|
from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
40
app/Main.hs
Normal file
40
app/Main.hs
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
module Main where
|
||||||
|
|
||||||
|
import qualified Language.GraphQL.Parser as GraphQL
|
||||||
|
import qualified Language.GraphQL.AST as GraphQL
|
||||||
|
import qualified Language.GraphQL.Reflection as GraphQL
|
||||||
|
import qualified Data.Text.IO as Text
|
||||||
|
import Text.Megaparsec (ParseErrorBundle)
|
||||||
|
import qualified Text.Megaparsec as Parsec
|
||||||
|
import qualified System.Environment as System
|
||||||
|
import qualified Language.Haskell.Exts.Syntax as Haskell
|
||||||
|
import Data.Foldable (traverse_)
|
||||||
|
import Control.Monad ((>=>))
|
||||||
|
import Control.Category ((>>>))
|
||||||
|
import qualified Language.Haskell.Exts.Syntax as Haskell
|
||||||
|
import Data.List.NonEmpty (NonEmpty)
|
||||||
|
import Control.Exception
|
||||||
|
|
||||||
|
main :: IO ()
|
||||||
|
main = print doc
|
||||||
|
where
|
||||||
|
doc :: GraphQL.Document
|
||||||
|
doc = Parsec.parseMaybe GraphQL.document "<nothing>"
|
||||||
|
-- main :: IO ()
|
||||||
|
-- main = System.getArgs >>= traverse_ run
|
||||||
|
|
||||||
|
run :: FilePath -> IO ()
|
||||||
|
run = parse >=> (GraphQL.toType >>> print @(NonEmpty (Haskell.Decl ())))
|
||||||
|
|
||||||
|
parse :: FilePath -> IO GraphQL.Document
|
||||||
|
parse p = do
|
||||||
|
txt <- Text.readFile p
|
||||||
|
either badFailureMechanism pure $ Parsec.parse GraphQL.document p txt
|
||||||
|
where
|
||||||
|
badFailureMechanism = fail . displayException
|
||||||
|
|
||||||
|
getExample :: IO GraphQL.Document
|
||||||
|
getExample = parse p
|
||||||
|
where
|
||||||
|
p :: FilePath
|
||||||
|
p = "/Users/frederikhanghjiversen/git/zendesk/guide-graph/schema/schema.graphql"
|
52
package.yaml
Normal file
52
package.yaml
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
name: gql2hs
|
||||||
|
version: 0.1.0.0
|
||||||
|
github: "fredefox/gql2hs"
|
||||||
|
license: BSD3
|
||||||
|
author: "Frederik Hanghøj Iversen"
|
||||||
|
maintainer: "fhanghojiversen@zendesk.com"
|
||||||
|
copyright: "2019 Frederik Hanghøj Iversen"
|
||||||
|
|
||||||
|
extra-source-files:
|
||||||
|
- README.md
|
||||||
|
- ChangeLog.md
|
||||||
|
|
||||||
|
# Metadata used when publishing your package
|
||||||
|
# synopsis: Short description of your package
|
||||||
|
# category: Web
|
||||||
|
|
||||||
|
# To avoid duplicated efforts in documentation and dealing with the
|
||||||
|
# complications of embedding Haddock markup inside cabal files, it is
|
||||||
|
# common to point users to the README.md file.
|
||||||
|
description: Please see the README on GitHub at <https://github.com/fredefox/gql2hs#readme>
|
||||||
|
|
||||||
|
dependencies:
|
||||||
|
- base >= 4.7 && < 5
|
||||||
|
- graphql
|
||||||
|
- haskell-src-exts
|
||||||
|
- text
|
||||||
|
- megaparsec
|
||||||
|
|
||||||
|
library:
|
||||||
|
source-dirs: src
|
||||||
|
|
||||||
|
executables:
|
||||||
|
gql2hs-exe:
|
||||||
|
main: Main.hs
|
||||||
|
source-dirs: app
|
||||||
|
ghc-options:
|
||||||
|
- -threaded
|
||||||
|
- -rtsopts
|
||||||
|
- -with-rtsopts=-N
|
||||||
|
dependencies:
|
||||||
|
- gql2hs
|
||||||
|
|
||||||
|
tests:
|
||||||
|
gql2hs-test:
|
||||||
|
main: Spec.hs
|
||||||
|
source-dirs: test
|
||||||
|
ghc-options:
|
||||||
|
- -threaded
|
||||||
|
- -rtsopts
|
||||||
|
- -with-rtsopts=-N
|
||||||
|
dependencies:
|
||||||
|
- gql2hs
|
27
src/Language/GraphQL/Reflection.hs
Normal file
27
src/Language/GraphQL/Reflection.hs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
module Language.GraphQL.Reflection (toType) where
|
||||||
|
|
||||||
|
import Language.GraphQL.AST as GraphQL
|
||||||
|
import Data.List.NonEmpty (NonEmpty)
|
||||||
|
import qualified Language.Haskell.Exts.Syntax as Haskell
|
||||||
|
|
||||||
|
toType :: GraphQL.Document -> NonEmpty (Haskell.Decl a)
|
||||||
|
toType = document
|
||||||
|
|
||||||
|
document :: GraphQL.Document -> NonEmpty (Haskell.Decl a)
|
||||||
|
document = fmap definition
|
||||||
|
|
||||||
|
definition :: GraphQL.Definition -> Haskell.Decl a
|
||||||
|
definition = \case
|
||||||
|
DefinitionOperation def -> definitionOperation def
|
||||||
|
DefinitionFragment def -> definitionFragment def
|
||||||
|
|
||||||
|
definitionOperation :: OperationDefinition -> Haskell.Decl a
|
||||||
|
definitionOperation = \case
|
||||||
|
OperationSelectionSet op -> selectionSet op
|
||||||
|
OperationDefinition{} -> undefined
|
||||||
|
|
||||||
|
selectionSet :: SelectionSet -> Haskell.Decl a
|
||||||
|
selectionSet = undefined
|
||||||
|
|
||||||
|
definitionFragment :: FragmentDefinition -> Haskell.Decl a
|
||||||
|
definitionFragment (FragmentDefinition fragmentName typeCondition directive selectionSet) = _
|
7
stack.yaml
Normal file
7
stack.yaml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
resolver: lts-13.30
|
||||||
|
|
||||||
|
packages:
|
||||||
|
- .
|
||||||
|
|
||||||
|
extra-deps:
|
||||||
|
- graphql-0.4.0.0
|
2
test/Spec.hs
Normal file
2
test/Spec.hs
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
main :: IO ()
|
||||||
|
main = putStrLn "Test suite not yet implemented"
|
Loading…
Reference in a new issue