| Crates.io | rx_core_subject_provenance |
| lib.rs | rx_core_subject_provenance |
| version | 0.2.0 |
| created_at | 2026-01-19 21:08:53.173283+00 |
| updated_at | 2026-01-24 15:11:23.454764+00 |
| description | provenance_subject for rx_core |
| homepage | https://github.com/AlexAegis/rx_bevy |
| repository | https://github.com/AlexAegis/rx_bevy |
| max_upload_size | |
| id | 2055360 |
| size | 17,675 |
BehaviorSubject that also stores an additional filtering value to track provenance so subscribers can filter by origin.
N values and replays them to late subscribers.Run the example with:
cargo run -p rx_core --example subject_provenance_example
use rx_core::prelude::*;
#[derive(PartialEq, Clone, Debug)]
enum ExampleProvenance {
Foo,
Bar,
}
fn main() {
let mut subject = ProvenanceSubject::<ExampleProvenance, usize>::new(
10,
ExampleProvenance::Foo,
);
let _all_subscription = subject
.clone()
.all()
.subscribe(PrintObserver::<usize>::new("provenance_ignored"));
let _bar_subscription = subject
.clone()
.only_by_provenance(ExampleProvenance::Bar)
.subscribe(PrintObserver::<usize>::new("provenance_bar"));
let _foo_subscription = subject
.clone()
.only_by_provenance(ExampleProvenance::Foo)
.subscribe(PrintObserver::<usize>::new("provenance_foo"));
subject.next((1, ExampleProvenance::Foo));
subject.next((2, ExampleProvenance::Bar));
subject.next((3, ExampleProvenance::Foo));
subject.next((4, ExampleProvenance::Bar));
}
Output:
provenance_ignored - next: 10
provenance_foo - next: 10
provenance_ignored - next: 1
provenance_foo - next: 1
provenance_bar - next: 2
provenance_ignored - next: 2
provenance_ignored - next: 3
provenance_foo - next: 3
provenance_bar - next: 4
provenance_ignored - next: 4
provenance_foo - unsubscribed
provenance_bar - unsubscribed
provenance_ignored - unsubscribed