cabal-version: 3.0

name: quasar-network
version: 0.1.0.0
category: Protocol, Network, Networking, Network API
description: RPC library with support for pipelining, reverse calls and data streams.
author: Jens Nolte
maintainer: Jens Nolte
copyright: 2021 Jens Nolte
license: BSD-2-Clause
license-file: LICENSE
build-type: Simple
extra-source-files:
  README.md

source-repository head
  type: git
  location: https://git.c3pb.de/jens/quasar-network.git

common shared-properties
  default-extensions:
    AllowAmbiguousTypes
    BangPatterns
    BlockArguments
    DataKinds
    DefaultSignatures
    DeriveAnyClass
    DeriveGeneric
    DerivingStrategies
    DuplicateRecordFields
    ExistentialQuantification
    FlexibleContexts
    FlexibleInstances
    FunctionalDependencies
    GADTs
    GeneralizedNewtypeDeriving
    InstanceSigs
    LambdaCase
    NamedFieldPuns
    NoImplicitPrelude
    OverloadedStrings
    PolyKinds
    RankNTypes
    ScopedTypeVariables
    StandaloneDeriving
    TemplateHaskell
    TupleSections
    TypeFamilies
    TypeOperators
    ViewPatterns
    -- Required for the record-dot-preprocessor plugin
    DuplicateRecordFields
    TypeApplications
    FlexibleContexts
    DataKinds
    MultiParamTypeClasses
    TypeSynonymInstances
    FlexibleInstances
    UndecidableInstances
    GADTs
  build-depends:
    base >=4.7 && <5,
    async,
    binary,
    bytestring,
    hashable,
    mtl,
    network,
    quasar,
    template-haskell,
    unix,
    unordered-containers,
    -- required for record-dot-preprocessor
    record-dot-preprocessor,
    record-hasfield,
  default-language: Haskell2010
  ghc-options:
    -fplugin=RecordDotPreprocessor
    -Weverything
    -Wno-all-missed-specialisations
    -Wno-missing-safe-haskell-mode
    -Wno-missing-import-lists
    -Wno-unsafe
    -Werror=incomplete-patterns
    -Werror=missing-methods

common shared-executable-properties
  import: shared-properties
  ghc-options:
    -threaded
    -rtsopts "-with-rtsopts=-N -I0"

library
  import: shared-properties
  exposed-modules:
    Quasar.Network
    Quasar.Network.Connection
    Quasar.Network.Exception
    Quasar.Network.Multiplexer
    Quasar.Network.Runtime
    Quasar.Network.Runtime.Observable
    Quasar.Network.SocketLocation
    Quasar.Network.TH
  hs-source-dirs:
    src

test-suite quasar-network-test
  import: shared-executable-properties
  type: exitcode-stdio-1.0
  build-depends:
    QuickCheck,
    hspec,
    quasar-network,
    stm,
  main-is: Spec.hs
  other-modules:
    Quasar.NetworkSpec
    Quasar.Network.MultiplexerSpec
  hs-source-dirs:
    test