-- |
-- = Protocol Buffers v3 for Haskell
--
-- This package defines tools for working with protocol buffers version 3 in
-- Haskell.
--
-- Specifically, it provides:
--
-- * Low-level functions for encoding and decoding messages
-- * Type classes for encoding and decoding messages, and instances for all
--   wire formats identified in the specification
-- * A higher-level approach to encoding and decoding, based on "GHC.Generics"
-- * A way of creating .proto files from Haskell types.
--
-- See the "Proto3.Suite.Tutorial" module for more details.
{-# LANGUAGE ExplicitNamespaces #-}

module Proto3.Suite
  (
  -- * Message Encoding/Decoding
    toLazyByteString
  , fromByteString
  , fromB64
  , Message(..)
  , MessageField(..)
  , Primitive(..)
  , HasDefault(..)
  , FieldNumber(..)
  , fieldNumber

  -- * Documentation
  , message
  , enum
  , RenderingOptions(..)
  , Named(..)
  , Finite(..)

  -- * Wire Formats
  , Fixed(..)
  , Signed(..)
  , Enumerated(..)
  , Nested(..)
  , UnpackedVec(..)
  , PackedVec(..)
  , NestedVec(..)
  , Commented(..)
  , type (//)()

  -- * AST
  , module DotProto
  ) where

import Proto3.Suite.Class
import Proto3.Suite.DotProto as DotProto
import Proto3.Suite.Types

import Proto3.Wire.Types