Skip to content

v1.7.4

Choose a tag to compare

@github-actions github-actions released this 11 Jun 06:12
· 111 commits to main since this release

What's changed in v1.7.4

  • refactor: harden distributed_macros expansion and diagnostics (#82) (by @patrickleet)

    Restructure the four proc-macros in distributed_macros/src/lib.rs
    (sourced, aggregate!, digest, enqueue) to the testable
    expand_* -> syn::Result<TokenStream2> shape already used by
    snapshot.rs and read_model.rs. The thin #[proc_macro*] entry points
    now convert errors via .unwrap_or_else(|e| e.to_compile_error()).
    Generated output is byte-identical — only the structure and error
    plumbing changed (verified: all 250+ macro-using tests in the main
    crate still pass).

    Diagnostics: unknown keyword args in parse_digest_args,
    parse_sourced_args, parse_event_args, and parse_enqueue_args now
    produce pointed, spanned syn::Error messages that name the bad key and
    list the valid ones, instead of being silently left unconsumed and
    surfacing as a bare "unexpected token". Also added up-front checks for
    duplicate #[event] names and #[event] methods missing a self receiver,
    and a clearer "missing entity field" message for bare #[sourced()].

    enqueue fix: #[enqueue] now accepts entity = field so a renamed
    entity field produces a correct is_replaying() guard instead of a
    confusing "no field entity" error pointing at the user's method.

    ReplayError: kept as String. Replay errors are flattened from
    heterogeneous sources (per-event decode errors, user method errors of
    arbitrary E, unknown-event messages) via e.to_string(); a typed
    error would have to be generic over each method's error type or erase
    them anyway. Rationale documented inline.

    Tests: added unit tests for the new expand_/parse_ functions and a
    trybuild compile-fail suite (tests/compile_fail/*.rs + harness)
    covering an unsupported #[event] signature, duplicate event names,
    unknown attribute keys, #[sourced] missing the entity field, and the
    renamed-entity #[enqueue] footgun.

    Implements [[tasks/macro-crate-hardening]]

See full diff: v1.7.3...v1.7.4