distributed 1.7.4

CQRS/ES framework for Rust using Plain Old Rust Structs — append-only events, replay, snapshots, outbox, service bus, and pluggable infrastructure
Documentation
### 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](https://github.com/hops-ops/distributed/compare/v1.7.3...v1.7.4)