From 19125b42beaf9bfd053e489055c5a7c2edd78552 Mon Sep 17 00:00:00 2001 From: intractable Date: Thu, 2 Nov 2017 15:36:57 -0500 Subject: [PATCH] `proto3-suite` => `97c4f66` (#37) * `proto3-suite` => `9394ade` and regenerate CG artifacts * `proto3-suite` => `56cf36f` * `proto3-wire` => `a938330` * `proto3-suite` => `e8f2acb` * Update `stack.yaml` * Update CG artifacts for Echo and Arithmetic examples * Update `stack.yaml` * `proto3-suite` => `aff63e6` and add related nix deps * Update CG artifacts for Echo and Arithmetic examples * `proto3-suite` => `97c4f66` * Nitpick: Rename test exe from `test` to `tests` * Add `.gitattributes` files to mark generated modules --- examples/echo/echo-hs/.gitattributes | 1 + examples/echo/echo-hs/Echo.hs | 52 ++++++++++++++++++++--- examples/tutorial/.gitattributes | 1 + examples/tutorial/Arithmetic.hs | 63 ++++++++++++++++++++++++---- grpc-haskell.cabal | 2 +- nix/cabal-doctest.nix | 10 +++++ nix/insert-ordered-containers.nix | 23 ++++++++++ nix/proto3-suite.nix | 28 +++++++------ nix/proto3-wire.nix | 6 +-- nix/swagger2.nix | 27 ++++++++++++ release.nix | 9 ++++ stack.yaml | 5 ++- 12 files changed, 196 insertions(+), 31 deletions(-) create mode 100644 examples/echo/echo-hs/.gitattributes create mode 100644 examples/tutorial/.gitattributes create mode 100644 nix/cabal-doctest.nix create mode 100644 nix/insert-ordered-containers.nix create mode 100644 nix/swagger2.nix diff --git a/examples/echo/echo-hs/.gitattributes b/examples/echo/echo-hs/.gitattributes new file mode 100644 index 0000000..66fe0e4 --- /dev/null +++ b/examples/echo/echo-hs/.gitattributes @@ -0,0 +1 @@ +Echo.hs linguist-generated diff --git a/examples/echo/echo-hs/Echo.hs b/examples/echo/echo-hs/Echo.hs index f7cf0cf..89c8bf3 100644 --- a/examples/echo/echo-hs/Echo.hs +++ b/examples/echo/echo-hs/Echo.hs @@ -4,22 +4,26 @@ {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-} +{-# OPTIONS_GHC -fno-warn-unused-matches #-} -- | Generated by Haskell protocol buffer compiler. DO NOT EDIT! module Echo where import qualified Prelude as Hs import qualified Proto3.Suite.DotProto as HsProtobuf import qualified Proto3.Suite.Types as HsProtobuf import qualified Proto3.Suite.Class as HsProtobuf +import qualified Proto3.Suite.JSONPB as HsJSONPB +import Proto3.Suite.JSONPB ((.=), (.:)) import qualified Proto3.Wire as HsProtobuf -import Control.Applicative ((<*>), (<|>)) +import Control.Applicative ((<*>), (<|>), (<$>)) +import qualified Control.Monad as Hs import qualified Data.Text.Lazy as Hs (Text) import qualified Data.ByteString as Hs import qualified Data.String as Hs (fromString) import qualified Data.Vector as Hs (Vector) import qualified Data.Int as Hs (Int16, Int32, Int64) import qualified Data.Word as Hs (Word16, Word32, Word64) -import GHC.Generics as Hs -import GHC.Enum as Hs +import qualified GHC.Generics as Hs +import qualified GHC.Enum as Hs import Network.GRPC.HighLevel.Generated as HsGRPC import Network.GRPC.HighLevel.Client as HsGRPC import Network.GRPC.HighLevel.Server as HsGRPC hiding (serverLoop) @@ -28,8 +32,8 @@ import Network.GRPC.HighLevel.Server.Unregistered as HsGRPC import Network.GRPC.LowLevel.Call as HsGRPC data Echo request response = Echo{echoDoEcho :: - request 'HsGRPC.Normal EchoRequest EchoResponse -> - Hs.IO (response 'HsGRPC.Normal EchoResponse)} + request 'HsGRPC.Normal Echo.EchoRequest Echo.EchoResponse -> + Hs.IO (response 'HsGRPC.Normal Echo.EchoResponse)} deriving Hs.Generic echoServer :: @@ -83,6 +87,25 @@ instance HsProtobuf.Message EchoRequest where [] Hs.Nothing)] +instance HsJSONPB.ToJSONPB EchoRequest where + toJSONPB (EchoRequest f1) = (HsJSONPB.object ["message" .= f1]) + toEncodingPB (EchoRequest f1) = (HsJSONPB.pairs ["message" .= f1]) + +instance HsJSONPB.FromJSONPB EchoRequest where + parseJSONPB + = (HsJSONPB.withObject "EchoRequest" + (\ obj -> (Hs.pure EchoRequest) <*> obj .: "message")) + +instance HsJSONPB.ToJSON EchoRequest where + toJSON = HsJSONPB.toAesonValue + toEncoding = HsJSONPB.toAesonEncoding + +instance HsJSONPB.FromJSON EchoRequest where + parseJSON = HsJSONPB.parseJSONPB + +instance HsJSONPB.ToSchema EchoRequest where + declareNamedSchema = HsJSONPB.genericDeclareNamedSchemaJSONPB + data EchoResponse = EchoResponse{echoResponseMessage :: Hs.Text} deriving (Hs.Show, Hs.Eq, Hs.Ord, Hs.Generic) @@ -105,3 +128,22 @@ instance HsProtobuf.Message EchoResponse where (HsProtobuf.Single "message") [] Hs.Nothing)] + +instance HsJSONPB.ToJSONPB EchoResponse where + toJSONPB (EchoResponse f1) = (HsJSONPB.object ["message" .= f1]) + toEncodingPB (EchoResponse f1) = (HsJSONPB.pairs ["message" .= f1]) + +instance HsJSONPB.FromJSONPB EchoResponse where + parseJSONPB + = (HsJSONPB.withObject "EchoResponse" + (\ obj -> (Hs.pure EchoResponse) <*> obj .: "message")) + +instance HsJSONPB.ToJSON EchoResponse where + toJSON = HsJSONPB.toAesonValue + toEncoding = HsJSONPB.toAesonEncoding + +instance HsJSONPB.FromJSON EchoResponse where + parseJSON = HsJSONPB.parseJSONPB + +instance HsJSONPB.ToSchema EchoResponse where + declareNamedSchema = HsJSONPB.genericDeclareNamedSchemaJSONPB \ No newline at end of file diff --git a/examples/tutorial/.gitattributes b/examples/tutorial/.gitattributes new file mode 100644 index 0000000..8ef5ecb --- /dev/null +++ b/examples/tutorial/.gitattributes @@ -0,0 +1 @@ +Arithmetic.hs linguist-generated diff --git a/examples/tutorial/Arithmetic.hs b/examples/tutorial/Arithmetic.hs index 2b0a0e6..d436fdd 100644 --- a/examples/tutorial/Arithmetic.hs +++ b/examples/tutorial/Arithmetic.hs @@ -4,22 +4,26 @@ {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-name-shadowing #-} +{-# OPTIONS_GHC -fno-warn-unused-matches #-} -- | Generated by Haskell protocol buffer compiler. DO NOT EDIT! module Arithmetic where import qualified Prelude as Hs import qualified Proto3.Suite.DotProto as HsProtobuf import qualified Proto3.Suite.Types as HsProtobuf import qualified Proto3.Suite.Class as HsProtobuf +import qualified Proto3.Suite.JSONPB as HsJSONPB +import Proto3.Suite.JSONPB ((.=), (.:)) import qualified Proto3.Wire as HsProtobuf -import Control.Applicative ((<*>), (<|>)) +import Control.Applicative ((<*>), (<|>), (<$>)) +import qualified Control.Monad as Hs import qualified Data.Text.Lazy as Hs (Text) import qualified Data.ByteString as Hs import qualified Data.String as Hs (fromString) import qualified Data.Vector as Hs (Vector) import qualified Data.Int as Hs (Int16, Int32, Int64) import qualified Data.Word as Hs (Word16, Word32, Word64) -import GHC.Generics as Hs -import GHC.Enum as Hs +import qualified GHC.Generics as Hs +import qualified GHC.Enum as Hs import Network.GRPC.HighLevel.Generated as HsGRPC import Network.GRPC.HighLevel.Client as HsGRPC import Network.GRPC.HighLevel.Server as HsGRPC hiding (serverLoop) @@ -28,11 +32,17 @@ import Network.GRPC.HighLevel.Server.Unregistered as HsGRPC import Network.GRPC.LowLevel.Call as HsGRPC data Arithmetic request response = Arithmetic{arithmeticAdd :: - request 'HsGRPC.Normal TwoInts OneInt -> - Hs.IO (response 'HsGRPC.Normal OneInt), + request 'HsGRPC.Normal Arithmetic.TwoInts + Arithmetic.OneInt + -> + Hs.IO (response 'HsGRPC.Normal Arithmetic.OneInt), arithmeticRunningSum :: - request 'HsGRPC.ClientStreaming OneInt OneInt -> - Hs.IO (response 'HsGRPC.ClientStreaming OneInt)} + request 'HsGRPC.ClientStreaming Arithmetic.OneInt + Arithmetic.OneInt + -> + Hs.IO + (response 'HsGRPC.ClientStreaming + Arithmetic.OneInt)} deriving Hs.Generic arithmeticServer :: @@ -106,6 +116,26 @@ instance HsProtobuf.Message TwoInts where [] Hs.Nothing)] +instance HsJSONPB.ToJSONPB TwoInts where + toJSONPB (TwoInts f1 f2) = (HsJSONPB.object ["x" .= f1, "y" .= f2]) + toEncodingPB (TwoInts f1 f2) + = (HsJSONPB.pairs ["x" .= f1, "y" .= f2]) + +instance HsJSONPB.FromJSONPB TwoInts where + parseJSONPB + = (HsJSONPB.withObject "TwoInts" + (\ obj -> (Hs.pure TwoInts) <*> obj .: "x" <*> obj .: "y")) + +instance HsJSONPB.ToJSON TwoInts where + toJSON = HsJSONPB.toAesonValue + toEncoding = HsJSONPB.toAesonEncoding + +instance HsJSONPB.FromJSON TwoInts where + parseJSON = HsJSONPB.parseJSONPB + +instance HsJSONPB.ToSchema TwoInts where + declareNamedSchema = HsJSONPB.genericDeclareNamedSchemaJSONPB + data OneInt = OneInt{oneIntResult :: Hs.Int32} deriving (Hs.Show, Hs.Eq, Hs.Ord, Hs.Generic) @@ -127,3 +157,22 @@ instance HsProtobuf.Message OneInt where (HsProtobuf.Single "result") [] Hs.Nothing)] + +instance HsJSONPB.ToJSONPB OneInt where + toJSONPB (OneInt f1) = (HsJSONPB.object ["result" .= f1]) + toEncodingPB (OneInt f1) = (HsJSONPB.pairs ["result" .= f1]) + +instance HsJSONPB.FromJSONPB OneInt where + parseJSONPB + = (HsJSONPB.withObject "OneInt" + (\ obj -> (Hs.pure OneInt) <*> obj .: "result")) + +instance HsJSONPB.ToJSON OneInt where + toJSON = HsJSONPB.toAesonValue + toEncoding = HsJSONPB.toAesonEncoding + +instance HsJSONPB.FromJSON OneInt where + parseJSON = HsJSONPB.parseJSONPB + +instance HsJSONPB.ToSchema OneInt where + declareNamedSchema = HsJSONPB.genericDeclareNamedSchemaJSONPB \ No newline at end of file diff --git a/grpc-haskell.cabal b/grpc-haskell.cabal index 2374114..556083a 100644 --- a/grpc-haskell.cabal +++ b/grpc-haskell.cabal @@ -221,7 +221,7 @@ executable echo-client hs-source-dirs: examples/echo/echo-hs main-is: EchoClient.hs -test-suite test +test-suite tests build-depends: base >=4.8 && <5.0 , grpc-haskell diff --git a/nix/cabal-doctest.nix b/nix/cabal-doctest.nix new file mode 100644 index 0000000..360c9a1 --- /dev/null +++ b/nix/cabal-doctest.nix @@ -0,0 +1,10 @@ +{ mkDerivation, base, Cabal, directory, filepath, stdenv }: +mkDerivation { + pname = "cabal-doctest"; + version = "1.0.2"; + sha256 = "0h3wsjf2mg8kw1zvxc0f9nzchj5kzvza9z0arcyixkd9rkgqq6sa"; + libraryHaskellDepends = [ base Cabal directory filepath ]; + homepage = "https://github.com/phadej/cabal-doctest"; + description = "A Setup.hs helper for doctests running"; + license = stdenv.lib.licenses.bsd3; +} diff --git a/nix/insert-ordered-containers.nix b/nix/insert-ordered-containers.nix new file mode 100644 index 0000000..5f95713 --- /dev/null +++ b/nix/insert-ordered-containers.nix @@ -0,0 +1,23 @@ +{ mkDerivation, aeson, base, base-compat, hashable, lens +, QuickCheck, semigroupoids, semigroups, stdenv, tasty +, tasty-quickcheck, text, transformers, unordered-containers +}: +mkDerivation { + pname = "insert-ordered-containers"; + version = "0.2.1.0"; + sha256 = "1612f455dw37da9g7bsd1s5kyi84mnr1ifnjw69892amyimi47fp"; + revision = "3"; + editedCabalFile = "6fdce987672b006226243aa17522b57ec7a9e1cab247802eddbdaa9dc5b06446"; + libraryHaskellDepends = [ + aeson base base-compat hashable lens semigroupoids semigroups text + transformers unordered-containers + ]; + testHaskellDepends = [ + aeson base base-compat hashable lens QuickCheck semigroupoids + semigroups tasty tasty-quickcheck text transformers + unordered-containers + ]; + homepage = "https://github.com/phadej/insert-ordered-containers#readme"; + description = "Associative containers retating insertion order for traversals"; + license = stdenv.lib.licenses.bsd3; +} diff --git a/nix/proto3-suite.nix b/nix/proto3-suite.nix index 0415ba0..b197577 100644 --- a/nix/proto3-suite.nix +++ b/nix/proto3-suite.nix @@ -1,25 +1,27 @@ -{ mkDerivation, aeson, attoparsec, base, base64-bytestring -, bytestring, cereal, containers, deepseq, doctest, fetchgit, foldl -, haskell-src, lens, mtl, neat-interpolation, optparse-generic -, parsec, parsers, pretty, pretty-show, proto3-wire, QuickCheck -, range-set-list, safe, semigroups, stdenv, system-filepath, tasty -, tasty-hunit, tasty-quickcheck, text, transformers, turtle, vector +{ mkDerivation, aeson, aeson-pretty, attoparsec, base +, base64-bytestring, bytestring, cereal, containers, deepseq +, doctest, fetchgit, foldl, haskell-src, lens, mtl +, neat-interpolation, optparse-generic, parsec, parsers, pretty +, pretty-show, proto3-wire, QuickCheck, range-set-list, safe +, semigroups, stdenv, swagger2, system-filepath, tasty, tasty-hunit +, tasty-quickcheck, text, transformers, turtle, vector }: mkDerivation { pname = "proto3-suite"; version = "0.1.0.0"; src = fetchgit { - url = "https://github.com/awakesecurity/proto3-suite.git"; - sha256 = "0fa5jdzzs45p54fxc8prpbrc1ckpa86lsp3lkjdzf5rbhlvpvim3"; - rev = "281a533df6b1d1cfa369729f2a149374958e78c2"; + url = "https://github.com/awakenetworks/proto3-suite"; + sha256 = "076fh739580vp9h23d4zw3mddmd0md39c7k4x8macwy502wgdf1j"; + rev = "97c4f66c8972416cca8b0bd1d9b307863bbc82e2"; }; isLibrary = true; isExecutable = true; libraryHaskellDepends = [ - aeson attoparsec base base64-bytestring bytestring cereal - containers deepseq foldl haskell-src lens mtl neat-interpolation - parsec parsers pretty pretty-show proto3-wire QuickCheck safe - semigroups system-filepath text transformers turtle vector + aeson aeson-pretty attoparsec base base64-bytestring bytestring + cereal containers deepseq foldl haskell-src lens mtl + neat-interpolation parsec parsers pretty pretty-show proto3-wire + QuickCheck safe semigroups swagger2 system-filepath text + transformers turtle vector ]; executableHaskellDepends = [ base containers optparse-generic proto3-wire range-set-list diff --git a/nix/proto3-wire.nix b/nix/proto3-wire.nix index a43269e..b0b85ee 100644 --- a/nix/proto3-wire.nix +++ b/nix/proto3-wire.nix @@ -6,9 +6,9 @@ mkDerivation { pname = "proto3-wire"; version = "1.0.0"; src = fetchgit { - url = "https://github.com/awakesecurity/proto3-wire"; - sha256 = "0pcacsz33n84rkc6yi99yq2dy4fisrhqpfbkqa3nfsjqhlw43gcf"; - rev = "077b7e329fd7f43b0628c23b83c5e2e05334002e"; + url = "https://github.com/awakenetworks/proto3-wire.git"; + sha256 = "14n0d16an782ayipirm5v2mvp58jgf65xvffqzp08p50sksil3gi"; + rev = "a938330bf794cf3fa05591d03906915df98d157c"; }; libraryHaskellDepends = [ base bytestring cereal containers deepseq hashable QuickCheck safe diff --git a/nix/swagger2.nix b/nix/swagger2.nix new file mode 100644 index 0000000..f98db58 --- /dev/null +++ b/nix/swagger2.nix @@ -0,0 +1,27 @@ +{ mkDerivation, aeson, aeson-qq, base, base-compat, bytestring +, Cabal, cabal-doctest, containers, doctest, generics-sop, Glob +, hashable, hspec, http-media, HUnit, insert-ordered-containers +, lens, mtl, network, QuickCheck, scientific, stdenv +, template-haskell, text, time, transformers, transformers-compat +, unordered-containers, uuid-types, vector +}: +mkDerivation { + pname = "swagger2"; + version = "2.1.6"; + sha256 = "01a29h56vfyw0ilij1pn6qwy50ca90kyj884vs1q52vvh572758j"; + setupHaskellDepends = [ base Cabal cabal-doctest ]; + libraryHaskellDepends = [ + aeson base base-compat bytestring containers generics-sop hashable + http-media insert-ordered-containers lens mtl network scientific + template-haskell text time transformers transformers-compat + unordered-containers uuid-types vector + ]; + testHaskellDepends = [ + aeson aeson-qq base base-compat bytestring containers doctest Glob + hashable hspec HUnit insert-ordered-containers lens mtl QuickCheck + text time unordered-containers vector + ]; + homepage = "https://github.com/GetShopTV/swagger2"; + description = "Swagger 2.0 data model"; + license = stdenv.lib.licenses.bsd3; +} diff --git a/release.nix b/release.nix index 5c56fda..8c0031b 100644 --- a/release.nix +++ b/release.nix @@ -179,6 +179,12 @@ let pkgs.haskell.lib.dontCheck (haskellPackagesNew.callPackage ./nix/aeson.nix {}); + cabal-doctest = + haskellPackagesNew.callPackage ./nix/cabal-doctest.nix { }; + + insert-ordered-containers = + haskellPackagesNew.callPackage ./nix/insert-ordered-containers.nix { }; + optparse-applicative = haskellPackagesNew.callPackage ./nix/optparse-applicative.nix { }; @@ -270,6 +276,9 @@ let ''; }); + swagger2 = + pkgs.haskell.lib.dontHaddock (haskellPackagesNew.callPackage ./nix/swagger2.nix { }); + turtle = haskellPackagesNew.callPackage ./nix/turtle.nix { }; diff --git a/stack.yaml b/stack.yaml index fd8bfd6..39edf2c 100644 --- a/stack.yaml +++ b/stack.yaml @@ -9,15 +9,16 @@ packages: - '.' - location: git: git@github.com:awakenetworks/proto3-suite.git - commit: 281a533df6b1d1cfa369729f2a149374958e78c2 + commit: 97c4f66c8972416cca8b0bd1d9b307863bbc82e2 extra-dep: true - location: git: git@github.com:awakenetworks/proto3-wire.git - commit: 077b7e329fd7f43b0628c23b83c5e2e05334002e + commit: a938330bf794cf3fa05591d03906915df98d157c extra-dep: true # Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) extra-deps: [ aeson-1.1.1.0 , managed-1.0.5 + , swagger2-2.1.6 ] # Override default flag values for local packages and extra-deps