diff --git a/core/LICENSE b/core/LICENSE new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/core/LICENSE @@ -0,0 +1 @@ +../LICENSE \ No newline at end of file diff --git a/core/README.md b/core/README.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/core/README.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/core/Setup.hs b/core/Setup.hs new file mode 120000 index 0000000..115f3bb --- /dev/null +++ b/core/Setup.hs @@ -0,0 +1 @@ +../Setup.hs \ No newline at end of file diff --git a/cbits/grpc_haskell.c b/core/cbits/grpc_haskell.c similarity index 100% rename from cbits/grpc_haskell.c rename to core/cbits/grpc_haskell.c diff --git a/core/grpc-haskell-core.cabal b/core/grpc-haskell-core.cabal new file mode 100644 index 0000000..71d19f6 --- /dev/null +++ b/core/grpc-haskell-core.cabal @@ -0,0 +1,119 @@ +name: grpc-haskell-core +version: 0.0.0.0 +synopsis: Haskell implementation of gRPC layered on shared C library. +homepage: https://github.com/awakenetworks/gRPC-haskell +license: Apache-2.0 +license-file: LICENSE +author: Awake Networks +maintainer: opensource@awakenetworks.com +copyright: Copyright 2016 Awake Networks +category: Network +build-type: Simple +cabal-version: >=1.10 + +Flag Debug + Description: Adds debug logging. + Manual: True + Default: False + +library + build-depends: + base >=4.8 && <5.0 + , clock >=0.6.0 && <0.8.0 + , bytestring ==0.10.* + , stm == 2.4.* + , containers ==0.5.* + , managed >= 1.0.0 && < 1.1 + , pipes >=4.1 && <=4.4 + , transformers + , proto3-suite + , proto3-wire + + , async ==2.1.* + , tasty >= 0.11 && <0.12 + , tasty-hunit >= 0.9 && <0.10 + , tasty-quickcheck >= 0.8.4 && < 0.9 + , safe ==0.3.* + , vector + , sorted-list >=0.1.6.1 && <=0.3 + + c-sources: + cbits/grpc_haskell.c + exposed-modules: + -- NOTE: the order of these matters to c2hs. + Network.GRPC.Unsafe.Constants + Network.GRPC.Unsafe.Time + Network.GRPC.Unsafe.Slice + Network.GRPC.Unsafe.ChannelArgs + Network.GRPC.Unsafe.ByteBuffer + Network.GRPC.Unsafe.Metadata + Network.GRPC.Unsafe.Op + Network.GRPC.Unsafe + Network.GRPC.Unsafe.Security + Network.GRPC.LowLevel + Network.GRPC.LowLevel.Server.Unregistered + Network.GRPC.LowLevel.Client.Unregistered + Network.GRPC.LowLevel.CompletionQueue + Network.GRPC.LowLevel.CompletionQueue.Internal + Network.GRPC.LowLevel.CompletionQueue.Unregistered + Network.GRPC.LowLevel.GRPC + Network.GRPC.LowLevel.Op + Network.GRPC.LowLevel.Server + Network.GRPC.LowLevel.Call + Network.GRPC.LowLevel.Call.Unregistered + Network.GRPC.LowLevel.Client + extra-libraries: + grpc + includes: + include/grpc_haskell.h + , grpc/grpc.h + , grpc/status.h + , grpc/support/time.h + , grpc/impl/codegen/compression_types.h + , grpc/slice_buffer.h + , grpc/slice.h + build-tools: c2hs + default-language: Haskell2010 + ghc-options: -Wall -fwarn-incomplete-patterns -fno-warn-unused-do-bind + include-dirs: include + hs-source-dirs: src + default-extensions: CPP + CC-Options: -std=c99 + if flag(debug) + CPP-Options: -DDEBUG + CC-Options: -DGRPC_HASKELL_DEBUG -std=c99 + +test-suite tests + build-depends: + base >=4.8 && <5.0 + , grpc-haskell-core + , bytestring ==0.10.* + , unix + , time + , async + , tasty >= 0.11 && <0.12 + , tasty-hunit >= 0.9 && <0.10 + , tasty-quickcheck >= 0.8.4 && < 0.9 + , containers ==0.5.* + , managed >= 1.0.0 && < 1.1 + , pipes >=4.1 && <=4.4 + , proto3-suite + , transformers + , safe + , clock >=0.6.0 && <0.8.0 + , turtle >= 1.2.0 + , text + , QuickCheck >=2.8 && <3.0 + other-modules: + LowLevelTests, + LowLevelTests.Op, + UnsafeTests + default-language: Haskell2010 + ghc-options: -Wall -fwarn-incomplete-patterns -fno-warn-unused-do-bind -g -threaded -rtsopts + hs-source-dirs: tests + main-is: Properties.hs + type: exitcode-stdio-1.0 + default-extensions: CPP + if flag(debug) + CPP-Options: -DDEBUG + CC-Options: -DGRPC_HASKELL_DEBUG diff --git a/include/grpc_haskell.h b/core/include/grpc_haskell.h similarity index 100% rename from include/grpc_haskell.h rename to core/include/grpc_haskell.h diff --git a/src/Network/GRPC/LowLevel.hs b/core/src/Network/GRPC/LowLevel.hs similarity index 100% rename from src/Network/GRPC/LowLevel.hs rename to core/src/Network/GRPC/LowLevel.hs diff --git a/src/Network/GRPC/LowLevel/Call.hs b/core/src/Network/GRPC/LowLevel/Call.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Call.hs rename to core/src/Network/GRPC/LowLevel/Call.hs diff --git a/src/Network/GRPC/LowLevel/Call/Unregistered.hs b/core/src/Network/GRPC/LowLevel/Call/Unregistered.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Call/Unregistered.hs rename to core/src/Network/GRPC/LowLevel/Call/Unregistered.hs diff --git a/src/Network/GRPC/LowLevel/Client.hs b/core/src/Network/GRPC/LowLevel/Client.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Client.hs rename to core/src/Network/GRPC/LowLevel/Client.hs diff --git a/src/Network/GRPC/LowLevel/Client/Unregistered.hs b/core/src/Network/GRPC/LowLevel/Client/Unregistered.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Client/Unregistered.hs rename to core/src/Network/GRPC/LowLevel/Client/Unregistered.hs diff --git a/src/Network/GRPC/LowLevel/CompletionQueue.hs b/core/src/Network/GRPC/LowLevel/CompletionQueue.hs similarity index 100% rename from src/Network/GRPC/LowLevel/CompletionQueue.hs rename to core/src/Network/GRPC/LowLevel/CompletionQueue.hs diff --git a/src/Network/GRPC/LowLevel/CompletionQueue/Internal.hs b/core/src/Network/GRPC/LowLevel/CompletionQueue/Internal.hs similarity index 100% rename from src/Network/GRPC/LowLevel/CompletionQueue/Internal.hs rename to core/src/Network/GRPC/LowLevel/CompletionQueue/Internal.hs diff --git a/src/Network/GRPC/LowLevel/CompletionQueue/Unregistered.hs b/core/src/Network/GRPC/LowLevel/CompletionQueue/Unregistered.hs similarity index 100% rename from src/Network/GRPC/LowLevel/CompletionQueue/Unregistered.hs rename to core/src/Network/GRPC/LowLevel/CompletionQueue/Unregistered.hs diff --git a/src/Network/GRPC/LowLevel/GRPC.hs b/core/src/Network/GRPC/LowLevel/GRPC.hs similarity index 100% rename from src/Network/GRPC/LowLevel/GRPC.hs rename to core/src/Network/GRPC/LowLevel/GRPC.hs diff --git a/src/Network/GRPC/LowLevel/Op.hs b/core/src/Network/GRPC/LowLevel/Op.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Op.hs rename to core/src/Network/GRPC/LowLevel/Op.hs diff --git a/src/Network/GRPC/LowLevel/Server.hs b/core/src/Network/GRPC/LowLevel/Server.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Server.hs rename to core/src/Network/GRPC/LowLevel/Server.hs diff --git a/src/Network/GRPC/LowLevel/Server/Unregistered.hs b/core/src/Network/GRPC/LowLevel/Server/Unregistered.hs similarity index 100% rename from src/Network/GRPC/LowLevel/Server/Unregistered.hs rename to core/src/Network/GRPC/LowLevel/Server/Unregistered.hs diff --git a/src/Network/GRPC/Unsafe.chs b/core/src/Network/GRPC/Unsafe.chs similarity index 100% rename from src/Network/GRPC/Unsafe.chs rename to core/src/Network/GRPC/Unsafe.chs diff --git a/src/Network/GRPC/Unsafe/ByteBuffer.chs b/core/src/Network/GRPC/Unsafe/ByteBuffer.chs similarity index 100% rename from src/Network/GRPC/Unsafe/ByteBuffer.chs rename to core/src/Network/GRPC/Unsafe/ByteBuffer.chs diff --git a/src/Network/GRPC/Unsafe/ChannelArgs.chs b/core/src/Network/GRPC/Unsafe/ChannelArgs.chs similarity index 100% rename from src/Network/GRPC/Unsafe/ChannelArgs.chs rename to core/src/Network/GRPC/Unsafe/ChannelArgs.chs diff --git a/src/Network/GRPC/Unsafe/Constants.hsc b/core/src/Network/GRPC/Unsafe/Constants.hsc similarity index 100% rename from src/Network/GRPC/Unsafe/Constants.hsc rename to core/src/Network/GRPC/Unsafe/Constants.hsc diff --git a/src/Network/GRPC/Unsafe/Metadata.chs b/core/src/Network/GRPC/Unsafe/Metadata.chs similarity index 100% rename from src/Network/GRPC/Unsafe/Metadata.chs rename to core/src/Network/GRPC/Unsafe/Metadata.chs diff --git a/src/Network/GRPC/Unsafe/Op.chs b/core/src/Network/GRPC/Unsafe/Op.chs similarity index 100% rename from src/Network/GRPC/Unsafe/Op.chs rename to core/src/Network/GRPC/Unsafe/Op.chs diff --git a/src/Network/GRPC/Unsafe/Security.chs b/core/src/Network/GRPC/Unsafe/Security.chs similarity index 100% rename from src/Network/GRPC/Unsafe/Security.chs rename to core/src/Network/GRPC/Unsafe/Security.chs diff --git a/src/Network/GRPC/Unsafe/Slice.chs b/core/src/Network/GRPC/Unsafe/Slice.chs similarity index 100% rename from src/Network/GRPC/Unsafe/Slice.chs rename to core/src/Network/GRPC/Unsafe/Slice.chs diff --git a/src/Network/GRPC/Unsafe/Time.chs b/core/src/Network/GRPC/Unsafe/Time.chs similarity index 100% rename from src/Network/GRPC/Unsafe/Time.chs rename to core/src/Network/GRPC/Unsafe/Time.chs diff --git a/tests/LowLevelTests.hs b/core/tests/LowLevelTests.hs similarity index 100% rename from tests/LowLevelTests.hs rename to core/tests/LowLevelTests.hs diff --git a/tests/LowLevelTests/Op.hs b/core/tests/LowLevelTests/Op.hs similarity index 100% rename from tests/LowLevelTests/Op.hs rename to core/tests/LowLevelTests/Op.hs diff --git a/core/tests/Properties.hs b/core/tests/Properties.hs new file mode 100644 index 0000000..d184a29 --- /dev/null +++ b/core/tests/Properties.hs @@ -0,0 +1,12 @@ +import LowLevelTests +import LowLevelTests.Op +import Test.Tasty +import UnsafeTests + +main :: IO () +main = defaultMain $ testGroup "GRPC Unit Tests" + [ unsafeTests + , unsafeProperties + , lowLevelOpTests + , lowLevelTests + ] diff --git a/tests/UnsafeTests.hs b/core/tests/UnsafeTests.hs similarity index 100% rename from tests/UnsafeTests.hs rename to core/tests/UnsafeTests.hs diff --git a/tests/ssl/generate-cert.sh b/core/tests/ssl/generate-cert.sh similarity index 100% rename from tests/ssl/generate-cert.sh rename to core/tests/ssl/generate-cert.sh diff --git a/tests/ssl/localhost.crt b/core/tests/ssl/localhost.crt similarity index 100% rename from tests/ssl/localhost.crt rename to core/tests/ssl/localhost.crt diff --git a/tests/ssl/localhost.key b/core/tests/ssl/localhost.key similarity index 100% rename from tests/ssl/localhost.key rename to core/tests/ssl/localhost.key diff --git a/grpc-haskell.cabal b/grpc-haskell.cabal index 556083a..7c34cd0 100644 --- a/grpc-haskell.cabal +++ b/grpc-haskell.cabal @@ -33,6 +33,7 @@ library , transformers , proto3-suite , proto3-wire + , grpc-haskell-core , async ==2.1.* , tasty >= 0.11 && <0.12 @@ -42,46 +43,12 @@ library , vector , sorted-list >=0.1.6.1 && <=0.3 - c-sources: - cbits/grpc_haskell.c exposed-modules: - -- NOTE: the order of these matters to c2hs. - Network.GRPC.Unsafe.Constants - Network.GRPC.Unsafe.Time - Network.GRPC.Unsafe.Slice - Network.GRPC.Unsafe.ChannelArgs - Network.GRPC.Unsafe.ByteBuffer - Network.GRPC.Unsafe.Metadata - Network.GRPC.Unsafe.Op - Network.GRPC.Unsafe - Network.GRPC.Unsafe.Security - Network.GRPC.LowLevel - Network.GRPC.LowLevel.Server.Unregistered - Network.GRPC.LowLevel.Client.Unregistered - Network.GRPC.LowLevel.CompletionQueue - Network.GRPC.LowLevel.CompletionQueue.Internal - Network.GRPC.LowLevel.CompletionQueue.Unregistered - Network.GRPC.LowLevel.GRPC - Network.GRPC.LowLevel.Op - Network.GRPC.LowLevel.Server - Network.GRPC.LowLevel.Call - Network.GRPC.LowLevel.Call.Unregistered - Network.GRPC.LowLevel.Client Network.GRPC.HighLevel Network.GRPC.HighLevel.Generated Network.GRPC.HighLevel.Server Network.GRPC.HighLevel.Server.Unregistered Network.GRPC.HighLevel.Client - extra-libraries: - grpc - includes: - include/grpc_haskell.h - , grpc/grpc.h - , grpc/status.h - , grpc/support/time.h - , grpc/impl/codegen/compression_types.h - , grpc/slice_buffer.h - , grpc/slice.h build-tools: c2hs default-language: Haskell2010 ghc-options: -Wall -fwarn-incomplete-patterns -fno-warn-unused-do-bind @@ -101,6 +68,7 @@ executable hellos-server , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , proto3-suite , proto3-wire , text @@ -120,6 +88,7 @@ executable hellos-client , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , proto3-suite , proto3-wire , text @@ -139,6 +108,7 @@ executable echo-server , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , optparse-generic , proto3-suite , proto3-wire @@ -162,6 +132,7 @@ executable arithmetic-server , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , optparse-generic , proto3-suite , proto3-wire @@ -184,6 +155,7 @@ executable arithmetic-client , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , optparse-generic , proto3-suite , proto3-wire @@ -206,6 +178,7 @@ executable echo-client , bytestring == 0.10.* , containers ==0.5.* , grpc-haskell + , grpc-haskell-core , optparse-generic , proto3-suite , proto3-wire @@ -243,9 +216,6 @@ test-suite tests , text , QuickCheck >=2.8 && <3.0 other-modules: - LowLevelTests, - LowLevelTests.Op, - UnsafeTests, GeneratedTests default-language: Haskell2010 ghc-options: -Wall -fwarn-incomplete-patterns -fno-warn-unused-do-bind -g -threaded -rtsopts diff --git a/stack.yaml b/stack.yaml index ec60fd6..fdcdcb4 100644 --- a/stack.yaml +++ b/stack.yaml @@ -7,6 +7,7 @@ resolver: lts-8.23 # Local packages, usually specified by relative directory name packages: - '.' +- 'core' - location: git: git@github.com:awakenetworks/proto3-suite.git commit: bb66853dcaa7372ef061cf83f39e4ba5193898de diff --git a/tests/Properties.hs b/tests/Properties.hs index ce84244..6f72793 100644 --- a/tests/Properties.hs +++ b/tests/Properties.hs @@ -1,14 +1,5 @@ -import LowLevelTests -import LowLevelTests.Op import Test.Tasty -import UnsafeTests import GeneratedTests main :: IO () -main = defaultMain $ testGroup "GRPC Unit Tests" - [ unsafeTests - , unsafeProperties - , lowLevelOpTests - , lowLevelTests - , generatedTests - ] +main = defaultMain $ testGroup "GRPC Unit Tests" [ generatedTests ]