MCPcopy Index your code
hub / github.com/KSXGitHub/pipe-trait

github.com/KSXGitHub/pipe-trait @0.4.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.4.0 ↗ · + Follow
27 symbols 68 edges 2 files 1 documented · 4%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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

Extension points exported contracts — how you extend this code

Pipe (Interface)
All sized types implement this trait. [1 implementers]
src/lib.rs

Core symbols most depended-on inside this repo

pipe
called by 8
src/lib.rs
pipe_ref
called by 3
src/lib.rs
pipe_mut
called by 2
src/lib.rs
pipe_as_ref
called by 0
src/lib.rs
pipe_as_mut
called by 0
src/lib.rs
pipe_deref
called by 0
src/lib.rs
pipe_deref_mut
called by 0
src/lib.rs
pipe_borrow
called by 0
src/lib.rs

Shape

Method 13
Function 11
Class 2
Interface 1

Languages

Rust100%

Modules by API surface

src/tests.rs17 symbols
src/lib.rs10 symbols

For agents

$ claude mcp add pipe-trait \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page