-- Initial protobuf-simple.cabal generated by cabal init.  For further
-- documentation, see http://haskell.org/cabal/users-guide/

name:                protobuf-simple
synopsis:            Simple Protocol Buffers library (proto2)
version:             0.1.0.2
homepage:            https://github.com/sru-systems/protobuf-simple
license:             MIT
license-file:        LICENSE
copyright:           (c) 2015-2016 Martijn Rijkeboer <mrr@sru-systems.com>
author:              Martijn Rijkeboer <mrr@sru-systems.com>
maintainer:          Martijn Rijkeboer <mrr@sru-systems.com>
category:            Data
stability:           experimental
tested-with:         GHC == 7.10.3
build-type:          Simple
cabal-version:       >= 1.10
extra-source-files:  README.md
                   , data/*.bin
                   , data/Types.proto
description:
    .
    An Haskell implementation of Google's Protocol Buffers version 2 with an
    emphasis on simplicity. The implementation consists of a library for
    encoding and decoding of data and the `protoc` executable for generating
    Haskell types from proto files. In fact, the types that are used in the
    tests are generated with the following command:
    .
    > $ protoc data/Types.proto
    .
    In the example below, the `CustomType` is a Haskell type that was generated
    with the `protoc` executable. The `encCustomType` function encodes a
    CustomType into a ByteString. The `decCustomType` function decodes a
    ByteString into either a CustomType or an error.
    .
    > module Codec where
    >
    > import Data.ByteString.Lazy (ByteString)
    > import Data.ProtoBuf (decode, encode)
    > import Types.CustomType (CustomType(..))
    >
    > encCustomType :: CustomType -> ByteString
    > encCustomType = encode
    >
    > decCustomType :: ByteString -> Either String CustomType
    > decCustomType = decode
    .
    The library exposes two modules, "Data.ProtoBuf", which is used for
    encoding and decoding and "Data.ProtoBufInt", which is an internal module
    that is used by the generated types.


library
  hs-source-dirs:      src
  exposed-modules:     Data.ProtoBuf
                     , Data.ProtoBufInt
  other-modules:       Data.ProtoBuf.Default
                     , Data.ProtoBuf.FieldNumber
                     , Data.ProtoBuf.Mergeable
                     , Data.ProtoBuf.Required
                     , Data.ProtoBuf.WireEnum
                     , Data.ProtoBuf.WireFormat
                     , Data.ProtoBuf.WireMessage
                     , Data.ProtoBuf.WireTag
                     , Data.ProtoBuf.WireType
                     , Data.ProtoBuf.ZigZag
  build-depends:       base                >= 4    && < 5
                     , binary              >= 0.7
                     , bytestring          >= 0.9
                     , containers          >= 0.4
                     , data-binary-ieee754 >= 0.4
                     , mtl                 >= 2.0
                     , text                >= 0.11
  default-language:    Haskell2010
  ghc-options:         -Wall


executable protoc
  hs-source-dirs:      app, src
  main-is:             Parser.hs
  other-modules:       Parser.CaseUtils
                     , Parser.CodeInfo
                     , Parser.EnumDesc
                     , Parser.EnumGenerator
                     , Parser.EnumValueDesc
                     , Parser.FieldDesc
                     , Parser.FileDesc
                     , Parser.FileWriter
                     , Parser.Generator
                     , Parser.GeneratorUtils
                     , Parser.Label
                     , Parser.MessageDesc
                     , Parser.MessageGenerator
                     , Parser.OptimizeMode
                     , Parser.ProtoParser
                     , Parser.Type
  build-depends:       base
                     , containers
                     , directory
                     , filepath
                     , mtl
                     , parsec
                     , split
                     , text
  default-language:    Haskell2010
  ghc-options:         -Wall -threaded -rtsopts -with-rtsopts=-N


test-suite protobuf-simple-test
  type:                exitcode-stdio-1.0
  hs-source-dirs:      test, src
  main-is:             Spec.hs
  other-modules:       Data.ProtoBuf
                     , Data.ProtoBuf.Default
                     , Data.ProtoBuf.FieldNumber
                     , Data.ProtoBuf.Mergeable
                     , Data.ProtoBuf.Required
                     , Data.ProtoBuf.WireEnum
                     , Data.ProtoBuf.WireFormat
                     , Data.ProtoBuf.WireMessage
                     , Data.ProtoBuf.WireTag
                     , Data.ProtoBuf.WireType
                     , Data.ProtoBuf.ZigZag
                     , Data.ProtoBuf.ZigZagSpec
                     , Data.ProtoBufInt
                     , Data.ProtoBufSpec
                     , Parser.CaseUtils
                     , Parser.EnumDesc
                     , Parser.EnumValueDesc
                     , Parser.FieldDesc
                     , Parser.FileDesc
                     , Parser.Label
                     , Parser.MessageDesc
                     , Parser.OptimizeMode
                     , Parser.ProtoParser
                     , Parser.ProtoParserSpec
                     , Parser.Type
                     , Types.BoolList
                     , Types.BoolListPacked
                     , Types.BoolMsg
                     , Types.BoolOptMsg
                     , Types.BytesList
                     , Types.BytesMsg
                     , Types.BytesOptMsg
                     , Types.DoubleList
                     , Types.DoubleListPacked
                     , Types.DoubleMsg
                     , Types.DoubleOptMsg
                     , Types.Enum
                     , Types.EnumList
                     , Types.EnumListPacked
                     , Types.EnumMsg
                     , Types.EnumOptMsg
                     , Types.Fixed32List
                     , Types.Fixed32ListPacked
                     , Types.Fixed32Msg
                     , Types.Fixed32OptMsg
                     , Types.Fixed64List
                     , Types.Fixed64ListPacked
                     , Types.Fixed64Msg
                     , Types.Fixed64OptMsg
                     , Types.FloatList
                     , Types.FloatListPacked
                     , Types.FloatMsg
                     , Types.FloatOptMsg
                     , Types.Int32List
                     , Types.Int32ListPacked
                     , Types.Int32Msg
                     , Types.Int32OptMsg
                     , Types.Int64List
                     , Types.Int64ListPacked
                     , Types.Int64Msg
                     , Types.Int64OptMsg
                     , Types.Message
                     , Types.MessageList
                     , Types.MessageMsg
                     , Types.MessageOptMsg
                     , Types.SFixed32List
                     , Types.SFixed32ListPacked
                     , Types.SFixed32Msg
                     , Types.SFixed32OptMsg
                     , Types.SFixed64List
                     , Types.SFixed64ListPacked
                     , Types.SFixed64Msg
                     , Types.SFixed64OptMsg
                     , Types.SInt32List
                     , Types.SInt32ListPacked
                     , Types.SInt32Msg
                     , Types.SInt32OptMsg
                     , Types.SInt64List
                     , Types.SInt64ListPacked
                     , Types.SInt64Msg
                     , Types.SInt64OptMsg
                     , Types.StringList
                     , Types.StringMsg
                     , Types.StringOptMsg
                     , Types.UInt32List
                     , Types.UInt32ListPacked
                     , Types.UInt32Msg
                     , Types.UInt32OptMsg
                     , Types.UInt64List
                     , Types.UInt64ListPacked
                     , Types.UInt64Msg
                     , Types.UInt64OptMsg
  build-depends:       QuickCheck
                     , base
                     , binary
                     , bytestring
                     , containers
                     , data-binary-ieee754
                     , filepath
                     , hspec
                     , parsec
                     , protobuf-simple
                     , quickcheck-instances
                     , split
                     , text
  default-language:    Haskell2010
  ghc-options:         -Wall -threaded -rtsopts -with-rtsopts=-N


source-repository head
  type:                git
  location:            https://github.com/sru-systems/protobuf-simple