# Changelog

All notable changes to this project will be documented in this file.
The project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added

- Implement `PartialEq`, `Eq` and `Hash` traits for `Resource`s based on (externref) pointer comparison.
- Implement copyable resources by customizing `Resource` drop logic (via another type param). These resources
  do not execute *any* logic on drop.
- **macro:** Allow marking arguments and return types of transformed functions as resources / not resources
  via the `#[resource]` attribute. (To signal that an argument or return type is not a resource, one may use
  `#[resource = false]` or `#[resource(false)]`.)

### Changed

- Bump minimum supported Rust version to 1.85 and switch to 2024 Rust edition.

### Fixed

- Fix `take_raw` dropping the externref before resolving it.
- Fix compatibility of the generated code with the 2024 Rust edition.

## 0.3.0-beta.1 - 2024-09-29

### Added

- Support `no_std` compilation mode for the library.
- Explain guard detection errors and provide more specific instructions on how to avoid them
  (e.g., use `debug = 1` in the profile config).

### Changed

- Bump minimum supported Rust version to 1.82.

## 0.2.0 - 2023-06-03

### Added

- Support upcasting and downcasting of `Resource`s.
- Support expressions in `link_name` / `export_name` attributes, such as 
  `#[export_name = concat("prefix_", stringify!($name))]` for use in macros (`$name`
  is a macro variable). Previously, only string literals were supported.
- Support re-exporting the crate by adding an optional `crate` parameter
  to the `#[externref]` attribute, e.g. `#[externref(crate = "other_crate::_externref")]`
  where `other_crate` defines `pub use externref as _externref`.
- **CLI:** add a command-line application for transforming WASM modules, and the Docker image
  with this application.

### Changed

- **Macro:** update `syn` dependency to 2.0.
- Bump minimum supported Rust version to 1.66.

### Fixed

- Fix an incorrect conditional compilation attribute for a tracing event
  in the processor module.
- Fix / document miscompilation resulting from optimization tools inlining
  an `externref`-operation function. The processor now returns an error
  if it encounters such an inlined function, and the docs mention how to avoid
  inlining (do not run WASM optimization tools before the `externref` processor).

## 0.1.0 - 2022-10-29

The initial release of `externref`.
