name: protobuf-simple synopsis: Simple Protocol Buffers library (proto2) version: 0.1.0.0 x-revision: 3 homepage: https://github.com/sru-systems/protobuf-simple license: MIT license-file: LICENSE copyright: (c) 2015-2016 Martijn Rijkeboer author: Martijn Rijkeboer maintainer: Martijn Rijkeboer category: Data stability: experimental tested-with: GHC == 7.10.3 build-type: Simple cabal-version: >= 1.10 extra-source-files: data/*.bin , data/Types.proto description: . = Protobuf-simple . 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. . . == Supported Data Types . The following Protocol Buffer types, with their Haskell counterparts, are supported: . * bool: Bool . * bytes: ByteString (lazy) . * double: Double . * enum: Sum-type . * fixed32: Word32 . * fixed64: Word64 . * float: Float . * int32: Int32 . * int64: Int64 . * message: Product-type or newtype . * sfixed32: Int32 . * sfixed64: Int64 . * sint32: Int32 . * sint64: Int64 . * string: Text (lazy) . * uint32: Word32 . * uint64: Word64 . . == Compatibility . Besides testing that decoding inverses encoding, the compatibility with other implementations is tested by decoding binary files that were created with protobuf-net (C#). . . == Other implementations . There are currently multiple Protocol Buffers implementations available. This library was created for the following reasons. Firstly, I wanted to use Data.Text for the string type instead of Data.ByteString as the protocol-buffers library does. Secondly, I wanted to use newtypes for messages with only one field. Finally, I wanted to use simpler data types than the protobuf library does. . For example, the protobuf library uses the following (example from the manual): . @ data Foo = Foo \ \ { field1 :: Required 1 (Value Int64) \ \ , field2 :: Optional 2 (Value Text) \ \ , field3 :: Repeated 3 (Value Bool) \ \ } deriving (Generic, Show) @ . Whereas protobuf-simple would use the following: . @ data Foo = Foo \ \ { field1 :: Int64 \ \ , field2 :: Maybe Text \ \ , field3 :: Seq Bool \ \ } deriving (Show, Eq, Ord) @ . . == Not Implemented . The following Protocol Buffers features are currently not implemented: . * Importing definitions . * Groups . * Declaring extensions in messages . * Declaring nested extensions in messages . * Oneof feature . * Associative maps . * Defining services . * Custom options 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