Pipette
A tiny crate mimicking Elixir's pipe operator for Rust without macros.
Install / Use
/learn @jkelleyrtp/PipetteREADME
Pipette
<div> <!-- Crates version --> <a href="https://crates.io/crates/pipette"> <img src="https://img.shields.io/crates/v/pipette.svg?style=flat-square" alt="Crates.io version" /> </a> <!-- Downloads --> <a href="https://crates.io/crates/pipette"> <img src="https://img.shields.io/crates/d/pipette.svg?style=flat-square" alt="Download" /> </a> <!-- docs.rs docs --> <a href="https://docs.rs/pipette"> <img src="https://img.shields.io/badge/docs-latest-blue.svg?style=flat-square" alt="docs.rs docs" /> </a> </div>A small crate for using pipes in Rust.
use pipette::{Pipeline, pipe};
let input = 1;
let output = pipe((
input
|a| a * 2,
|a| a * 3,
|a| a * 4,
|a| a * 5,
|a| a * 6,
|a| a * 7,
|a| a * 8,
));
assert_eq!(output, 40_320);
Pipette is unique:
- Supports polymorphic pipeline sizes
- Integrates well with IDE
- Does not require macros or custom traits
How to use Pipette
Pipette uses trait-based polymorphism (the Pipeline trait) to make it easy to assemble closure-based pipelines in Rust. A single pipeline may consist of up to 12 closures and does not require static typing (ie pipe3, pipe4, pipe5 etc.). Instead, the Pipeline trait will allow any tuple, calling compute any any size of pipeline.
fn add_one(a: i32) -> i32 {
a + 1
}
let r0 = pipe((0, add_one, add_one));
let r1 = pipe((0, add_one, add_one, add_one));
let r2 = pipe((0, add_one, add_one, add_one, add_one));
let r3 = pipe((0, add_one, add_one, add_one, add_one, add_one));
// lazy pipeline
let add_three = (0, add_one, add_one, add_one);
add_three.compute();
License
This project is licensed under the MIT license.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Pipette by you, shall be licensed as MIT, without any additional terms or conditions.
Related Skills
node-connect
352.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
111.5kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
352.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
352.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
