arrowpipe

Crates.ioarrowpipe
lib.rsarrowpipe
version0.1.0
created_at2023-11-13 20:03:12.986048+00
updated_at2023-11-13 20:03:12.986048+00
descriptionBuild complex pipelines easily
homepagehttps://github.com/Brian3647/arrowpipe
repositoryhttps://github.com/Brian3647/arrowpipe
max_upload_size
id1033971
size7,538
vĂ­ctor (Brian3647)

documentation

https://docs.rs/arrowpipe

README

ArrowPipe: Build complex pipelines easily

An [Arrow] is a function composition system that can be used to create complex data processing pipelines.

Installation

Add the following to your Cargo.toml:

[dependencies]
arrowpipe = { git = "https://github.com/Brian3647/arrowpipe" }

Example

use arrowpipe::Arrow;

fn add_one(x: i32) -> i32 {
   x + 1
}

fn double(x: i32) -> i32 {
  x * 2
}

let mut arrow = Arrow::new(add_one);
arrow.symbiotize(Arrow::new(double));
arrow.symbiotize(Arrow::new(|x| x - 1));

assert_eq!(arrow.shoot(1), 3);

Order of execution example:

use arrowpipe::Arrow;

fn add_one(x: i32) -> i32 {
   x + 1
}

let mut first = Arrow::new(add_one); // Second: 2 -> 3
first.symbiotize(Arrow::new(|x| x * 2)); // Third: 3 -> 6

let mut second = Arrow::new(add_one); // First: 1 -> 2
second.symbiotize(first);

assert_eq!(second.shoot(1), 6);

Why?

This is specially useful for long pipelines like a build system. With the Arrow struct, you can simply add another Arrow to an existing one to have a new step.

License

This project is licensed under the MIT license (LICENSE or http://opensource.org/licenses/MIT).

Commit count: 7

cargo fmt