packages feed

spire-protobuf-0.1.0.0: src/Spire/Protobuf.hs

-- | High-performance Protocol Buffers for Haskell.
--
-- Define messages as Haskell records with 'Field' wrappers for field
-- numbers, derive 'Generic' and 'ProtoMessage', and get encode\/decode
-- for free:
--
-- @
-- data User = User
--   { name  :: Field 1 Text
--   , age   :: Field 2 Int32
--   , email :: Field 3 (Maybe Text)
--   } deriving (Generic)
--
-- instance ProtoMessage User
--
-- -- Encode:
-- let bs = encode (User (Field "Alice") (Field 30) (Field (Just "alice\@example.com")))
--
-- -- Decode:
-- case decode bs of
--   Right user -> print user
--   Left err   -> error (show err)
-- @
module Spire.Protobuf
  ( -- * Messages
    ProtoMessage (..)
  , encode
  , decode
    -- * Field wrapper
  , Field (..)
    -- * Signed integer wrappers (zigzag encoding)
  , SInt32 (..)
  , SInt64 (..)
    -- * Proto3 map fields
  , ProtoMap (..)
    -- * Errors
  , DecodeError (..)
    -- * Re-exports for advanced use
  , ProtoEncode (..)
  , ProtoDecode (..)
  , decodePacked
  , DecodeRepeatedEntry (..)
  , ProtoDefault (..)
  , ProtoBuilder
  , WireType (..)
  ) where

import Spire.Protobuf.Wire (WireType (..))
import Spire.Protobuf.Field (Field (..), SInt32(..), SInt64(..), ProtoMap(..))
import Spire.Protobuf.Encode (ProtoEncode (..), ProtoBuilder, ProtoDefault (..))
import Spire.Protobuf.Decode (ProtoDecode (..), DecodeError (..), decodePacked, DecodeRepeatedEntry(..))
import Spire.Protobuf.Message (ProtoMessage (..), encode, decode)