Skip to content

Kyza/piping

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages