use super::rx_observable::RxObservable;
use super::rx_ref::RxRef;
use super::rx_val::RxVal;
use super::tracker::Tracker;
#[derive(Clone)]
pub struct RxSubject<T> {
inner: RxObservable<T>,
}
impl<T: 'static> RxSubject<T> {
pub fn new() -> Self {
Self {
inner: RxObservable::new(),
}
}
pub fn next(&self, value: T) {
self.inner.emit(&value);
}
pub fn observable(&self) -> RxObservable<T> {
self.inner.clone()
}
pub fn subscriber_count(&self) -> usize {
self.inner.subscriber_count()
}
pub fn to_val(&self, initial: T, tracker: &Tracker) -> RxVal<T>
where
T: Clone + PartialEq,
{
self.inner.to_val(initial, tracker)
}
pub fn map<B, F>(&self, f: F) -> RxObservable<B>
where
B: Clone + 'static,
F: Fn(&T) -> B + 'static,
{
self.inner.map(f)
}
pub fn flat_map_val<B, F>(&self, f: F) -> RxObservable<B>
where
B: Clone + PartialEq + 'static,
F: Fn(&T) -> RxVal<B> + 'static,
{
self.inner.flat_map_val(f)
}
pub fn flat_map_ref<B, F>(&self, f: F) -> RxObservable<B>
where
B: Clone + PartialEq + 'static,
F: Fn(&T) -> RxRef<B> + 'static,
{
self.inner.flat_map_ref(f)
}
pub fn flat_map_observable<B, F>(&self, f: F) -> RxObservable<B>
where
B: Clone + 'static,
F: Fn(&T) -> RxObservable<B> + 'static,
{
self.inner.flat_map_observable(f)
}
pub fn flat_map_subject<B, F>(&self, f: F) -> RxObservable<B>
where
B: Clone + 'static,
F: Fn(&T) -> RxSubject<B> + 'static,
{
self.inner.flat_map_subject(f)
}
pub fn join_observable(&self, other: RxObservable<T>) -> RxObservable<T>
where
T: Clone,
{
self.inner.join_observable(other)
}
pub fn join_subject(&self, other: RxSubject<T>) -> RxObservable<T>
where
T: Clone,
{
self.inner.join_subject(other)
}
}
impl<T: 'static> Default for RxSubject<T> {
fn default() -> Self {
Self::new()
}
}