All Projects β†’ KSXGitHub β†’ pipe-trait

KSXGitHub / pipe-trait

Licence: MIT license
Make it possible to chain regular functions

Programming Languages

rust
11053 projects

Projects that are alternatives of or similar to pipe-trait

Param pipe
parameterized pipe in elixir: |n>
Stars: ✭ 14 (-36.36%)
Mutual labels:  pipeline, pipe
Onhold
πŸ”Š Play sounds while and after shell jobs complete
Stars: ✭ 146 (+563.64%)
Mutual labels:  pipeline, pipe
Ttyplot
a realtime plotting utility for terminal/console with data input from stdin
Stars: ✭ 532 (+2318.18%)
Mutual labels:  pipeline, pipe
Pipeline
Pipeline is a package to build multi-staged concurrent workflows with a centralized logging output.
Stars: ✭ 433 (+1868.18%)
Mutual labels:  pipeline, pipe
etran
Erlang Parse Transforms Including Fold (MapReduce) comprehension, Elixir-like Pipeline, and default function arguments
Stars: ✭ 19 (-13.64%)
Mutual labels:  pipeline, pipe
Fluids
Fluid dynamics component of Chemical Engineering Design Library (ChEDL)
Stars: ✭ 154 (+600%)
Mutual labels:  pipeline, pipe
Hookah
A cross-platform tool for data pipelines.
Stars: ✭ 83 (+277.27%)
Mutual labels:  pipeline, pipe
tpack
Pack a Go workflow/function as a Unix-style pipeline command
Stars: ✭ 55 (+150%)
Mutual labels:  pipeline, pipe
pipe
Functional Pipeline in Go
Stars: ✭ 30 (+36.36%)
Mutual labels:  pipeline, pipe
Pipeline.rs
β˜”οΈ => ⛅️ => β˜€οΈ
Stars: ✭ 188 (+754.55%)
Mutual labels:  pipeline, pipe
rocket-pipes
Powerful pipes for TypeScript, that chain Promise and ADT for you 🚌 -> ⛰️ -> 🚠 -> πŸ‚ -> πŸš€
Stars: ✭ 18 (-18.18%)
Mutual labels:  pipeline, pipe
pypely
Make your data processing easy
Stars: ✭ 17 (-22.73%)
Mutual labels:  pipeline, pipe
predict-fraud-using-auto-ai
Use AutoAI to detect fraud
Stars: ✭ 27 (+22.73%)
Mutual labels:  pipeline
golang-docker-example
An example of how to run a Golang project in Docker in a Buildkite pipeline
Stars: ✭ 18 (-18.18%)
Mutual labels:  pipeline
TOGGLE
Toolbox for generic NGS analyses - A framework to quickly build pipelines and to perform large-scale NGS analysis
Stars: ✭ 18 (-18.18%)
Mutual labels:  pipeline
node-express-azure
Node & Express Demo App for Azure DevOps
Stars: ✭ 31 (+40.91%)
Mutual labels:  pipeline
get phylomarkers
A pipeline to select optimal markers for microbial phylogenomics and species tree estimation using coalescent and concatenation approaches
Stars: ✭ 34 (+54.55%)
Mutual labels:  pipeline
EF-Migrations-Script-Generator-Task
No description or website provided.
Stars: ✭ 20 (-9.09%)
Mutual labels:  pipeline
tfa
tfa is a 2fa cli tool that aims to help you to generate 2fa code on CI/CD pipelines.
Stars: ✭ 25 (+13.64%)
Mutual labels:  pipeline
arraydeque
A circular buffer with fixed capacity (Rust).
Stars: ✭ 82 (+272.73%)
Mutual labels:  no-std

Pipe Trait

Test Crates.io Version

Make it possible to chain regular functions.

APIs

By adding use pipe_trait::*, 9 methods are added to all types:

identifier pipe syntax traditional syntax
Pipe::pipe x.pipe(f) f(x)
Pipe::pipe_ref x.pipe_ref(f) f(&x)
Pipe::pipe_mut x.pipe_mut(f) f(&mut x)
Pipe::pipe_as_ref x.pipe_as_ref(f) f(x.as_ref())
Pipe::pipe_as_mut x.pipe_as_mut(f) f(x.as_mut())
Pipe::pipe_deref x.pipe_deref(f) f(&x)
Pipe::pipe_deref_mut x.pipe_deref_mut(f) f(&mut x)
Pipe::pipe_borrow x.pipe_borrow(f) f(x.borrow())
Pipe::pipe_borrow_mut x.pipe_borrow_mut(f) f(x.borrow_mut())

Read the docs for more information.

Usage Examples

Same type

use pipe_trait::*;
let inc = |x| x + 1;
let double = |x| x + x;
let square = |x| x * x;
let a = (123i32).pipe(inc).pipe(double).pipe(square);
let b = square(double(inc(123i32)));
assert_eq!(a, b);

Type transformation

use pipe_trait::*;
let x = 'x';
let a = x
    .pipe(|x| (x, x, x)) // (char, char, char)
    .pipe(|x| [x, x]) // [(char, char, char); 2]
    .pipe(|x| format!("{:?}", x)); // String
let b = "[('x', 'x', 'x'), ('x', 'x', 'x')]";
assert_eq!(a, b);

Pipe amongst method chain

use pipe_trait::*;
fn log<X: Debug>(x: X) -> X {
    println!("value: {:?}", x);
    x
}
my_future
    .pipe(log)
    .await
    .pipe(log)
    .inc()
    .pipe(log)
    .double()
    .pipe(log)
    .square()
    .pipe(log)
    .get()
    .pipe(log);

Explicit type annotation

use pipe_trait::*;
let x = "abc".to_string();
let a = x
    .pipe_ref::<&str, _>(AsRef::as_ref)
    .chars()
    .pipe::<Box<_>, _>(Box::new)
    .collect::<Vec<_>>();
let b = vec!['a', 'b', 'c'];
assert_eq!(a, b);

License

MIT © Hoàng Văn Khải

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].