Skip to main content

rx_rust/subject/
subject_observable.rs

1use super::Subject;
2use crate::observable::Subscription;
3use crate::utils::types::MaybeSend;
4use crate::{observable::Observable, observer::Observer};
5use educe::Educe;
6
7/// An observable from a subject without the observer behavior of the subject.
8#[derive(Educe)]
9#[educe(Debug, Clone)]
10pub struct SubjectObservable<S>(S);
11
12impl<S> SubjectObservable<S> {
13    pub fn new(subject: S) -> Self {
14        Self(subject)
15    }
16}
17
18impl<'or, T, E, S> Observable<'or, T, E> for SubjectObservable<S>
19where
20    S: Subject<'or, T, E>,
21{
22    type D = S::D;
23
24    fn subscribe(self, observer: impl Observer<T, E> + MaybeSend + 'or) -> Subscription<Self::D> {
25        self.0.subscribe(observer)
26    }
27}