another_rxrust/
material.rs

1use crate::prelude::RxError;
2use std::fmt::Debug;
3
4#[derive(Clone, Debug)]
5pub enum Material<T>
6where
7  T: Clone + Send + Sync,
8{
9  Next(T),
10  Error(RxError),
11  Complete,
12}
13
14#[cfg(test)]
15mod test {
16  use crate::prelude::*;
17
18  #[test]
19  fn basic() {
20    println!("{:?}", Material::Next(0));
21    println!(
22      "{:?}",
23      Material::Error::<i32>(RxError::from_error("ERR!"))
24    );
25    println!("{:?}", Material::Complete::<i32>);
26  }
27
28  #[test]
29  fn omit_scope() {
30    use Material::*;
31    println!("{:?}", Next(0));
32    println!(
33      "{:?}",
34      Error::<i32>(RxError::from_error("ERR!"))
35    );
36    println!("{:?}", Complete::<i32>);
37  }
38
39  #[test]
40  fn custom_type() {
41    use Material::*;
42    #[derive(Clone)]
43    struct X {}
44    let x = Next(X {});
45    // println!("{:?}", x); // compile error
46    match x {
47      Next(_) => println!("Next"),
48      Error(_) => println!("Error"),
49      Complete => println!("Complete"),
50    }
51  }
52}