View Source Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.3.0 - 2022-02-15

Added

  • [Plugin] Add the field/4 callback with an additional env argument. This is the same as field/3 but gives access to the environment of the field definition.

Deprecated

  • [Plugin] Deprecate the field/3 callback in favour of field/4. You should migrate to field/4, simply by adding _env as the last argument in your implementation. Currently, if a plugin implements field/3, field/4 is derived from it and a compilation warning is emitted. field/3 will be removed in TypedStruct 1.0.0.

Removed

  • Drop support for unsupported Elixir versions in the tests and CI. The library may still be compatible, but this is not tested.

Fixed

  • Fix the lexical scope of the typestruct block, so it covers it completely. Previously, anything defined inside the typedstruct block, such as aliases, would not be available for the field definitions. See #22 and #21 for details.
  • Fix a typo in the documentation.

0.2.1 - 2020-07-19

Added

  • Add the module: ModuleName top-level option to create the typed struct in a submodule.

Changed

  • Update the @typedoc example in the documentation to put it inside the typedstruct block and not above. While putting it above works in the general case, it is mandatory to put it inside the block when defining a submodule.

0.2.0 - 2020-05-31

Added

  • Add a plugin API.

Removed

  • Remove reflection support through the __keys__/0, __defaults__/0 and __types__/0 function which where defined by TypedStruct in the user modules. If you rely on these functions, please use the TypedStructLegacyReflection plugin to enable them again, and consider creating a plugin for your needs.

Fixed

  • Do not enforce fields with a default value set to nil (fixes #14).
  • Prefix all internal module attributes and clean them after use (fixes #15).
  • Create a scope in the typedstruct block to avoid import leaks.

0.1.4 - 2018-11-13

Added

  • Add the ability to generate an opaque type (#10).

0.1.3 - 2018-09-06

Fixed

  • Fix a bug where boolean fields with default: false where still enforced when setting enforce: true at top-level.

0.1.2 - 2018-09-06

Added

  • Add the ability to enforce keys by default (#6).

Fixed

  • Clarify the documentation about runtime: false.

0.1.1 - 2018-06-20

Fixed

  • Do not make the type nullable when there is a default value.

0.1.0 - 2018-06-19

Added

  • Struct definition
  • Type definition
  • Default values
  • Enforced keys