/rx-rs

A simple yet efficient reactive programming crate.

Primary LanguageRustMozilla Public License 2.0MPL-2.0

                                                                 
8 888888888o.   `8.`8888.      ,8' 8 888888888o.     d888888o.   
8 8888    `88.   `8.`8888.    ,8'  8 8888    `88.  .`8888:' `88. 
8 8888     `88    `8.`8888.  ,8'   8 8888     `88  8.`8888.   Y8 
8 8888     ,88     `8.`8888.,8'    8 8888     ,88  `8.`8888.     
8 8888.   ,88'      `8.`88888'     8 8888.   ,88'   `8.`8888.    
8 888888888P'       .88.`8888.     8 888888888P'     `8.`8888.   
8 8888`8b          .8'`8.`8888.    8 8888`8b          `8.`8888.  
8 8888 `8b.       .8'  `8.`8888.   8 8888 `8b.    8b   `8.`8888. 
8 8888   `8b.    .8'    `8.`8888.  8 8888   `8b.  `8b.  ;8.`8888 
8 8888     `88. .8'      `8.`8888. 8 8888     `88. `Y8888P ,88P' 

A reactive programming crate written in Rust! 

Install using the git link!
rxrs = { git = "https://github.com/noctisatrae/rx-rs.git" }

Exemple usage from tests/infrastructure.rs:

#[async_test]
async fn infrastructure_run() {
    let service_a = Service::new("Add 3", Box::new(|test: &u32| 3 + test));
    let service_b = Service::new("Substract 2", Box::new(|test: &u32| test - 2));

    let mut an_infrastructure = Infrastructure {
        services: vec![service_a, service_b],
        result: ServiceResult {
            iteration: 0,
            previous: vec![],
            current: Arc::new(3),
        },
    };

    let result = an_infrastructure.execute().await;

    assert_eq!(result.current, Arc::new(4))
}

- define your services and what they do...
- define an infrastructure containing your services...
- initialize the iterator so you can keep track of your data
- pass a vector to the "previous" field that will contain the value of each iteration
- create your base value so your infrastructure has something to work with.
- start your infrastructure and wait for the result!
- assert_eq to see if it works as intented.