# Changelog

`hslua-marshalling` uses [PVP Versioning][].

## hslua-marshalling-2.1.0

Released 29-01-2022.

-   Updated to hslua-core-2.1.0.

-   The `Success` constructor of the `Result` type is now strict;
    the `Failure` constructor remains lazy.

-   The stack is checked before pushing or retrieving nested
    structures: Pushing or peeking a deeply nested structure could
    lead an overflow of the Lua stack. The functions `pushList`,
    `pushSet`, and `pushKeyValuePairs`, as well as `peekList`,
    `peekSet`, and `peekKeyValuePairs` now check that sufficient
    stack space is available before pushing another value to the
    stack.

-   The function `toByteString` now requires a slot on the stack
    if the value at the given index is a number. It checks for
    available space before pushing to the stack, returning
    `Nothing` if no space is left on the stack.

-   The `withContext` function is made more useful and now
    differs from `retrieving`. The string “retrieving” is added
    to the error context by `retrieving`, so `withContext` allows
    to define contexts without this prefix.

-   New convenience function `pushAsTable`, making it easier to
    define a pusher function for values marshaled as tables.

## hslua-marshalling-2.0.1

Released 2021-11-04.

-   Allow `pushIterator` to skip values: If the function that
    pushes the values of a list item signals that it didn’t push
    any values, then that value will be skipped.

## hslua-marshalling-2.0.0

Released 2021-10-21.

-   Initially created. Contains modules previously found in the
    modules `Foreign.Lua.Peek` and `Foreign.Lua.Push` from
    `hslua-1.3`.

-   Removed most functions from the Userdata module,
    incl. peekAny, pushAny. The functions don’t add much value
    over those in `HsLua.Core.Userdata`. Use UDTypes from
    hslua-packaging for a more comfortable method of exposing data
    via userdata values.

  [PVP Versioning]: https://pvp.haskell.org
