1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
use quote;
use ;
use ;
/// # RxSubject
///
/// 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]`.