rx_rust/operators/creating/
start.rs1use crate::operators::creating::defer::Defer;
2use crate::operators::creating::just::Just;
3use crate::utils::types::MaybeSend;
4use crate::{
5 observable::{Observable, Subscription},
6 observer::Observer,
7};
8use educe::Educe;
9use std::convert::Infallible;
10
11#[derive(Educe)]
34#[educe(Debug, Clone)]
35pub struct Start<F>(F);
36
37impl<F> Start<F> {
38 pub fn new<T>(builder: F) -> Self
39 where
40 F: FnOnce() -> T,
41 {
42 Self(builder)
43 }
44}
45
46impl<'or, T, F> Observable<'or, T, Infallible> for Start<F>
47where
48 F: FnOnce() -> T,
49{
50 type D = ();
51
52 fn subscribe(
53 self,
54 observer: impl Observer<T, Infallible> + MaybeSend + 'or,
55 ) -> Subscription<Self::D> {
56 Defer::new(|| Just::new(self.0())).subscribe(observer)
57 }
58}