#chaining #chain #call #results #access #global #nightly

chainer

一个被诅咒的包,允许全局调用链,并访问链式函数的结果

2 个版本

0.1.1 2022 年 3 月 3 日
0.1.0 2022 年 3 月 3 日

#1203 in Rust 模式

MIT 许可证

17KB
191

crates.io docs.rs license

chainer

一个被诅咒的包,允许全局调用链,并访问链式函数的结果

当前,results 功能需要 min_specialization Rust Nightly 功能。

用法

[dependencies]
chainer = "*"

# or, with a nightly compiler

[dependencies]
chainer = { version = "*", features = ["results"] }

示例

基本用法(默认)

不可变调用链

use chainer::*;

struct HelloWorld;
impl HelloWorld {
    fn print(&self) {
        println!("Hello, world!");
    }
}

fn main() {
    HelloWorld
        .chain(HelloWorld::print)
        .chain(HelloWorld::print)
        .chain(HelloWorld::print);

    // Hello, world!
    // Hello, world!
    // Hello, world!
}

可变调用链

use chainer::*;

struct Counter { value: i32 }
impl Counter {
    fn increment(&mut self) {
        self.value += 1;
        println!("{}", self.value);
    }
}

fn main() {
    Counter { value: 0 }
        .chain_mut(Counter::increment)
        .chain_mut(Counter::increment)
        .chain_mut(Counter::increment);

    // 1
    // 2
    // 3
}

功能= ["results"]

不可变调用链

use chainer::*;

struct HelloWorld;
impl HelloWorld {
    fn print(&self) -> &'static str {
        println!("Hello, world!");
        "It works!"
    }
}

fn main() {
    let value: &'static str = HelloWorld
        .chain(HelloWorld::print)
        .chain(HelloWorld::print)
        .chain(HelloWorld::print)
        .result;

    // Hello, world!
    // Hello, world!
    // Hello, world!
    // It works!
}

可变调用链

use chainer::*;

struct Counter { value: i32 }
impl Counter {
    fn increment(&mut self) -> i32 {
        self.value += 1;
        println!("{}", self.value);
        self.value
    }
}

fn main() {
    let value: i32 = Counter { value: 0 }
        .chain_mut(Counter::increment)
        .chain_mut(Counter::increment)
        .chain_mut(Counter::increment)
        .result;

    println!("{value}");

    // 1
    // 2
    // 3
    // 3
}

无运行时依赖

功能