packages feed

grpc-spec-1.0.0: grpc-spec.cabal

cabal-version:      3.0
name:               grpc-spec
version:            1.0.0
synopsis:           Implementation of the pure part of the gRPC spec
description:        This is an implementation of the pure part of the core gRPC
                    spec at <https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md>.
                    This is by no means a full gRPC implementation, but can be
                    used as the basis for one; see @grapesy@ for a full
                    implementation.
license:            BSD-3-Clause
license-file:       LICENSE
author:             Edsko de Vries
maintainer:         edsko@well-typed.com
category:           Network
build-type:         Simple
extra-doc-files:    CHANGELOG.md
tested-with:        GHC==8.10.7
                  , GHC==9.2.8
                  , GHC==9.4.8
                  , GHC==9.6.6
                  , GHC==9.8.2
                  , GHC==9.10.1

source-repository head
  type:     git
  location: https://github.com/well-typed/grapesy

common lang
  ghc-options:
      -Wall
      -Wredundant-constraints
      -Wno-unticked-promoted-constructors
      -Wprepositive-qualified-module
      -Widentities
      -Wmissing-export-lists
  build-depends:
      base >= 4.14 && < 4.22
  default-language:
      Haskell2010
  default-extensions:
      ConstraintKinds
      DataKinds
      DeriveAnyClass
      DeriveGeneric
      DeriveTraversable
      DerivingStrategies
      DerivingVia
      DisambiguateRecordFields
      EmptyCase
      FlexibleContexts
      FlexibleInstances
      GADTs
      GeneralizedNewtypeDeriving
      ImportQualifiedPost
      KindSignatures
      LambdaCase
      MultiParamTypeClasses
      NamedFieldPuns
      NumericUnderscores
      PatternSynonyms
      PolyKinds
      RankNTypes
      ScopedTypeVariables
      StandaloneDeriving
      TupleSections
      TypeApplications
      TypeFamilies
      TypeOperators
      UndecidableInstances

  if impl(ghc >= 9.0)
    ghc-options:
      -- This was introduced in 8.10, but it does not work reliably until 9.0.
      -- In 8.10 you might get spurious warnings when using re-exported modules
      -- (e.g. in proto-lens-runtime).
      -Wunused-packages

  if flag(snappy)
    cpp-options: -DSNAPPY

library
  import:         lang
  hs-source-dirs: src, proto

  exposed-modules:
      Network.GRPC.Spec
      Network.GRPC.Spec.Serialization
      Network.GRPC.Spec.Util.HKD
      Network.GRPC.Spec.Util.Parser
  other-modules:
      Network.GRPC.Spec.Call
      Network.GRPC.Spec.Compression
      Network.GRPC.Spec.CustomMetadata.Map
      Network.GRPC.Spec.CustomMetadata.NoMetadata
      Network.GRPC.Spec.CustomMetadata.Raw
      Network.GRPC.Spec.CustomMetadata.Typed
      Network.GRPC.Spec.Headers.Common
      Network.GRPC.Spec.Headers.Invalid
      Network.GRPC.Spec.Headers.PseudoHeaders
      Network.GRPC.Spec.Headers.Request
      Network.GRPC.Spec.Headers.Response
      Network.GRPC.Spec.MessageMeta
      Network.GRPC.Spec.OrcaLoadReport
      Network.GRPC.Spec.PercentEncoding
      Network.GRPC.Spec.RPC
      Network.GRPC.Spec.RPC.JSON
      Network.GRPC.Spec.RPC.Protobuf
      Network.GRPC.Spec.RPC.Raw
      Network.GRPC.Spec.RPC.StreamType
      Network.GRPC.Spec.Serialization.Base64
      Network.GRPC.Spec.Serialization.CustomMetadata
      Network.GRPC.Spec.Serialization.Headers.Common
      Network.GRPC.Spec.Serialization.Headers.PseudoHeaders
      Network.GRPC.Spec.Serialization.Headers.Request
      Network.GRPC.Spec.Serialization.Headers.Response
      Network.GRPC.Spec.Serialization.LengthPrefixed
      Network.GRPC.Spec.Serialization.Status
      Network.GRPC.Spec.Serialization.Timeout
      Network.GRPC.Spec.Serialization.TraceContext
      Network.GRPC.Spec.Status
      Network.GRPC.Spec.Timeout
      Network.GRPC.Spec.TraceContext
      Network.GRPC.Spec.Util.ByteString
      Network.GRPC.Spec.Util.Protobuf

      Proto.OrcaLoadReport
      Proto.Status
  build-depends:
    , aeson                     >= 1.5     && < 2.3
    , base16-bytestring         >= 1.0     && < 1.1
    , base64-bytestring         >= 1.2     && < 1.3
    , binary                    >= 0.8     && < 0.9
    , bytestring                >= 0.10.12 && < 0.13
    , case-insensitive          >= 1.2     && < 1.3
    , containers                >= 0.6     && < 0.8
    , data-default              >= 0.7     && < 0.9
    , deepseq                   >= 1.4     && < 1.6
    , exceptions                >= 0.10    && < 0.11
    , hashable                  >= 1.3     && < 1.6
    , http-types                >= 0.12    && < 0.13
    , lens                      >= 5.0     && < 5.4
    , mtl                       >= 2.2     && < 2.4
    , network                   >= 3.2.4   && < 3.3
    , proto-lens                >= 0.7     && < 0.8
    , proto-lens-protobuf-types >= 0.7     && < 0.8
    , proto-lens-runtime        >= 0.7     && < 0.8
    , record-hasfield           >= 1.0     && < 1.1
    , text                      >= 1.2     && < 2.2
    , utf8-string               >= 1.0     && < 1.1
    , vector                    >= 0.13    && < 0.14
    , zlib                      >= 0.6     && < 0.8

  -- Snappy can be a bit tricky to install on some systems, so we make it an
  -- optional dependency. Snappy support can be explicitly disabled by clearing
  -- the @snappy@ flag manually
  --
  -- > package grpc-spec
  -- >    flags: -snappy
  --
  -- or by setting an unsatisfiable constraint on @snappy-c@
  --
  -- > constraints: snappy-c<0
  --
  -- It can be explicitly /enabled/ by setting the @snappy@ flag manually.
  if flag(snappy)
    build-depends:
      , snappy-c >= 0.1 && < 0.2

test-suite test-grpc-spec
  import:         lang
  type:           exitcode-stdio-1.0
  hs-source-dirs: test-grpc-spec
  main-is:        Main.hs
  build-depends:  grpc-spec

  other-modules:
      Test.Prop.IncrementalParsing
      Test.Prop.Serialization
      Test.Util.Awkward
      Test.Util.Orphans
      Test.Util.Protobuf

  build-depends:
      -- Inherited dependencies
    , base64-bytestring
    , bytestring
    , case-insensitive
    , containers
    , http-types
    , lens
    , mtl
    , proto-lens
    , text

  build-depends:
      -- Additional dependencies
    , prettyprinter               >= 1.7   && < 1.8
    , prettyprinter-ansi-terminal >= 1.1   && < 1.2
    , QuickCheck                  >= 2.14  && < 2.16
    , quickcheck-instances        >= 0.3   && < 0.4
    , tasty                       >= 1.4   && < 1.6
    , tasty-quickcheck            >= 0.10  && < 0.12
    , tree-diff                   >= 0.3   && < 0.4

Flag snappy
  description: Enable snappy compression capabilities
  default: True
  manual: False