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.

[1.1.0]

Added

Changed

  • Updated documentation to reflect Spark DSL syntax (replacing old defrpc macro references)
  • Improved error handling documentation with clearer examples
  • Per-function options passed to defrpc are now validated at compile time — unknown keys (e.g. a misspelled retry) raise EasyRpc.Error instead of being silently ignored; EasyRpc.RpcWrapper applies the same validation for consistent error messages
  • The default plug pipeline is pre-composed at compile time; running an RPC no longer rebuilds the closure chain per call
  • EasyRpc.Plugs.Telemetry gates on :telemetry availability at compile time, removing per-call rescue overhead when the optional dependency is absent

Fixed

  • Fixed inconsistencies between README examples and actual Spark DSL syntax
  • Corrected documented pipeline plug option syntax — Spark rejects bare keyword options like plug MyCachePlug, ttl: 5_000; plug options must be passed as plug MyCachePlug, opts: [ttl: 5_000] (README and EasyRpc.Plugs.Cache examples updated)
  • Fixed failing doctest for EasyRpc.version/0 (pinned a stale version)
  • WrapperConfig.load_config!/2 and load_from_options!/1 now honour the :enable_logging option (previously silently dropped)
  • Dynamic node providers returning non-atom values now fail fast with a clear %EasyRpc.Error{} instead of reaching :erpc.call with an invalid node name
  • In safe mode (error_handling/retry), short-circuited results (e.g. cache hits) are wrapped consistently by ErrorHandler, so callers always see {:ok, result} | {:error, error} regardless of pipeline path
  • Halted contexts are no longer retried by EasyRpc.Plugs.Retry — halting means "stop the pipeline", so retrying only burned the sleep time

[0.9.0] - 2024-01-15

Added

  • Migrated from macro-based DSL to Spark DSL for better extensibility
  • Added rpc_function entities with support for argument names (better IDE support)
  • Added private: true option to generate private functions (defp)
  • Added new_name option to create function aliases
  • Added comprehensive architecture documentation in guides/ARCHITECTURE.md
  • Added support for :infinity timeout

Changed

  • BREAKING: Replaced defrpc macro with rpc_function in Spark DSL
  • BREAKING: Replaced config :my_app, :api with config do...end blocks
  • Improved error handling with unified EasyRpc.Error struct
  • Enhanced node selection strategies with better documentation

Deprecated

  • Old macro style (use EasyRpc.RpcWrapper) - still works but not recommended

Removed

  • Removed deprecated DefRpc module (replaced by Spark DSL)

0.7.0 - 2023-12-01

Added

  • Added sleep_before_retry option for retry delay control
  • Added benchmark suite for performance comparison
  • Added telemetry events for RPC calls

Changed

  • Improved retry logic to automatically enable error_handling
  • Better error messages with context details

Fixed

  • Fixed sticky node not working with round_robin strategy
  • Fixed timeout not being applied correctly in some edge cases

0.6.0 - 2023-10-15

Added

  • Initial release with basic RPC wrapping functionality
  • Support for random, round_robin, and hash node selection
  • Basic retry and timeout support
  • Error handling with raise or {:ok, result} tuples