piping

Crates.iopiping
lib.rspiping
version1.0.0
sourcesrc
created_at2023-05-25 22:31:43.504129
updated_at2023-05-26 06:56:43.931119
descriptionPipeline syntax in Rust. `4isize |> double(__) |> __ as usize`.
homepage
repositoryhttps://github.com/Kyza/piping
max_upload_size
id874671
size10,207
Kyza (Kyza)

documentation

README

piping

piping provides a pipe! macro that allows you to use the pipeline operator in Rust.

let wrapped = orig_and_double(add(2, num)).1 as isize;

let piped = pipe! {
	num |> add(2, __) |> orig_and_double(__),
	(_, doubled) |> doubled as isize,
};

Features

  • Hack-like syntax.
  • Multiple pipelines in one statement.
  • Destructuring of previous pipeline results.

Docs

Documentation is provided on docs.rs.

How does it work?

fn add(a: usize, b: usize) -> usize {
	a + b
}

fn orig_and_double(num: usize) -> (usize, usize) {
	(num, num * 2)
}

let num = 4;

let piped = pipe! {
	num |> add(2, __) |> orig_and_double(__),
	(_, doubled) |> doubled as isize,
};

// Expands to...
let piped = {
	let __ = num;
	let __ = add(2, __);
	let (_, doubled) = orig_and_double(__);
	doubled as isize
};

You can pass any expression in as the input.

Notice that you can chain pipelines with ,s to destructure the result of the previous pipeline.

The macro also tries to optimize the generated code to minimize the amount of reassigning done.

Commit count: 10

cargo fmt