-- | This is the main public API of the store package. The functions -- exported here are more likely to be stable between versions. -- -- Usually you won't need to write your own 'Store' instances, and -- instead can rely on either using the 'Generic' deriving approach or -- "Data.Store.TH" for defining 'Store' instances for your datatypes. -- There are some tradeoffs here - the generics instances do not require -- @-XTemplateHaskell@, but they do not optimize as well for sum types -- that only require a constant number of bytes. -- -- If you need streaming encode / decode of multiple store encoded -- messages, take a look at the @store-streaming@ package. -- -- = Gotchas -- -- Store is best used for communication between trusted processes and -- local caches. It can certainly be used for other purposes, but the -- builtin set of instances have some gotchas to be aware of: -- -- * Store's builtin instances serialize in a format which depends on -- machine endianness. -- -- * Store's builtin instances trust the data when deserializing. For -- example, the deserialization of `Vector` will read the vector's -- link from the first 8 bytes. It will then allocate enough memory -- to store all the elements. Malicious or malformed input could -- cause allocation of large amounts of memory. See -- https://github.com/fpco/store/issues/122 module Data.Store ( -- * Encoding and decoding strict ByteStrings. encode, decode, decodeWith, decodeEx, decodeExWith, decodeExPortionWith, decodeIO, decodeIOWith, decodeIOPortionWith -- * Store class and related types. , Store(..), Size(..), Poke, Peek , GStoreSize, GStorePoke, GStorePeek -- ** Exceptions thrown by Peek , PeekException(..), peekException ) where import Data.Store.Internal