-- | Rattletrap is a tool for parsing and generating Rocket League replays. It
-- is typically used as an executable; see "Rattletrap.Main" for details about
-- that interface. Using Rattletrap from Haskell is as easy as importing this
-- module. Together with "Data.ByteString.Lazy" and "Data.Binary.Get", you can
-- decode a 'Replay' value. Then you can transform it into JSON with
-- "Data.Aeson". For example:
--
-- @
-- let file = "path-to/some.replay"
-- bytes <- 'Data.ByteString.Lazy.readFile' file
-- let replay = 'Data.Binary.Get.runGet' 'Rattletrap.Replay.getReplay' bytes
-- let json = 'Data.Aeson.encode' replay
-- 'Data.ByteString.Lazy.putStr' json
-- @
--
-- There are a few unusual aspects of Rattletrap to be aware of:
--
-- - In order to improve memory usage, everything Rattletrap does is strict.
--   Don't expect any lazy values or evaluation.
-- - Some names, like 'Text', collide with commonly-used modules. Use
--   qualified imports to avoid collisions.
-- - No instances of 'Data.Binary.Binary' are provided. Use functions like
--   'getReplay' instead. This was done to improve type inference and make
--   profiling easier. Also some types require information that could not be
--   provided by the 'Data.Binary.Binary' interface.
-- - Importing one specific module is not recommended because all JSON
--   instances are defined as orphans in "Rattletrap.Json".
module Rattletrap
  ( module Rattletrap.ActorMap
  , module Rattletrap.Attribute
  , module Rattletrap.AttributeMapping
  , module Rattletrap.AttributeType
  , module Rattletrap.AttributeValue
  , module Rattletrap.Cache
  , module Rattletrap.ClassAttributeMap
  , module Rattletrap.ClassMapping
  , module Rattletrap.Content
  , module Rattletrap.Crc
  , module Rattletrap.Data
  , module Rattletrap.Frame
  , module Rattletrap.Header
  , module Rattletrap.Helper
  , module Rattletrap.Initialization
  , module Rattletrap.KeyFrame
  , module Rattletrap.Main
  , module Rattletrap.Mark
  , module Rattletrap.Message
  , module Rattletrap.Primitive
  , module Rattletrap.Property
  , module Rattletrap.PropertyValue
  , module Rattletrap.RemoteId
  , module Rattletrap.Replay
  , module Rattletrap.Replication
  , module Rattletrap.ReplicationValue
  , module Rattletrap.Utility
  , module Rattletrap.Version
  ) where

import Rattletrap.ActorMap
import Rattletrap.Attribute
import Rattletrap.AttributeMapping
import Rattletrap.AttributeType
import Rattletrap.AttributeValue
import Rattletrap.Cache
import Rattletrap.ClassAttributeMap
import Rattletrap.ClassMapping
import Rattletrap.Content
import Rattletrap.Crc
import Rattletrap.Data
import Rattletrap.Frame
import Rattletrap.Header
import Rattletrap.Helper
import Rattletrap.Initialization
import Rattletrap.Json ()
import Rattletrap.KeyFrame
import Rattletrap.Main
import Rattletrap.Mark
import Rattletrap.Message
import Rattletrap.Primitive
import Rattletrap.Property
import Rattletrap.PropertyValue
import Rattletrap.RemoteId
import Rattletrap.Replay
import Rattletrap.Replication
import Rattletrap.ReplicationValue
import Rattletrap.Utility
import Rattletrap.Version