pipe-op

Crates.iopipe-op
lib.rspipe-op
version0.0.1
sourcesrc
created_at2020-10-19 05:54:23.021935
updated_at2020-10-19 05:54:23.021935
descriptionThe elixir pipe operator as a macro in Rust
homepage
repositoryhttps://github.com/mcraealex/pipe-op
max_upload_size
id302779
size11,000
Alexander McRae (McRaeAlex)

documentation

https://docs.rs/pipe-op

README

Pipe Operator

Implementation of the pipe operator in Rust as a macro.

I wrote this because of 3 main things:

  1. You cannot create methods on out of crate types. This means that chaining is harder.
  2. pipe_trait is nice but it requires currying for multi argument functions.
  3. I want to write a plug like HTTP server
pipe!(
    value,
    function1(args),
    function2(args)?, // notice the operator here
    function3(args).await
)

The pipe operator is common in languages like elixir and haskell, they provide clarity and convience.

conn
|> send_resp(404, "Not found")

Examples

The argument will always go into the first function or method call.

pipe!(value, a.f().m()) // is equivalent to a.f(value).m()

To get around this we can make it a closure and pass the arg where we want.

pipe!(value, {|x| a.f().m(x)}()) // is equivalent to a.f().m(value)
Commit count: 8

cargo fmt