#rx-core #macro-derive #rx

macro rx_core_macro_subject_derive

rx_core subject derive, implements associated type only traits

6 releases

Uses new Rust 2024

0.2.1 Feb 1, 2026
0.2.0 Jan 24, 2026
0.1.2 Jan 24, 2026
0.0.1 Jan 19, 2026

#1848 in Procedural macros

Download history 15/week @ 2026-01-14 11/week @ 2026-01-21 28/week @ 2026-01-28 34/week @ 2026-02-04 21/week @ 2026-02-11 77/week @ 2026-02-18 80/week @ 2026-02-25 30/week @ 2026-03-04 67/week @ 2026-03-11 59/week @ 2026-03-18 33/week @ 2026-03-25 47/week @ 2026-04-01 64/week @ 2026-04-08

220 downloads per month
Used in 29 crates (7 directly)

MIT license

55KB
1.5K SLoC

macro_subject_derive

crates.io ci codecov license

Helper macro to implement a few traits required for a subject.

Traits you still have to implement to get a subject

  • Observable
  • Observer (unless using #[rx_delegate_observer_to_destination])
  • SubscriptionLike (unless using #[rx_delegate_subscription_like_to_destination])

Traits Implemented

  • WithPrimaryCategory: Sets the associated type to PrimaryCategorySubject
  • ObserverInput: Sets the associated type In to the value of the #[rx_in(...)] attribute, or to Never (Infallible) if missing. Also sets the associated InError type to the value of the #[rx_in_error(...)] attribute, or to Never if missing.
  • ObservableOutput: Sets the associated type Out to the value of the #[rx_out(...)] attribute, or to Never (Infallible) if missing. Also sets the associated OutError type to the value of the #[rx_out_error(...)] attribute, or to Never if missing.
  • UpgradeableObserver: By default. It implements UpgradeableObserver by wrapping the subject into a ObserverSubscriber. This implementation can be opted out with the #[rx_does_not_upgrade_to_observer_subscriber] attribute to provide a manual implementation. Other preset implementations can be used with the #[rx_upgrades_to(...)] attribute.

Attributes

All attributes are prefixed with rx_ for easy auto-complete access.

  • #[rx_in(...)] (optional, default: Never): Defines the input type of the subject
  • #[rx_in_error(...)] (optional, default: Never): Defines the input error type of the subject
  • #[rx_out(...)] (optional, default: Never): Defines the output type of the subject, usually it's the same as the input type
  • #[rx_out_error(...)] (optional, default: Never): Defines the output error type of the subject, usually it's the same as the input error type
  • #[rx_does_not_upgrade_to_observer_subscriber] (optional): Opts out the default UpgradeableObserver implementation which just wraps the Subject in a ObserverSubscriber when used as a destination for an Observable to prevent upstream from unsubscribing the entire Subject.
  • #[rx_upgrades_to(...)] (optional, accepts: self, observer_subscriber): Defines a preset implementation for UpgradeableObserver
    • self: Upgraded version is itself, causing it to be unsubscribed when upstream is unsubscribed when used as an observables destination.
    • observer_subscriber: Upgraded version is itself wrapped in ObserverSubscriber, causing it to not be unsubscribed when upstream is unsubscribed when used as an observables destination.
  • #[rx_delegate_subscription_like_to_destination] (optional): Opts into the trivial implementation of SubscriptionLike where the traits methods are just simply called on the field marked as #[destination].
  • #[rx_delegate_observer_to_destination] (optional): Opts into the trivial implementation of Observer where the traits methods are just simply called on the field marked as #[destination].

See Also

Expanding the proc macro

In case you want to inspect the output of the proc macro.

If you haven't installed cargo-expand yet, install it first:

cargo install cargo-expand

Then expand the macro output:

cargo expand -p rx_core_observable_interval

Dependencies

~125–500KB
~12K SLoC