#error-chain #future #workaround #future-chain #out-of-box

futures-error-chain

在futures-rs和error-chain crate之间无需额外配置即可正常工作时的解决方案

1 个不稳定版本

使用旧的Rust 2015

0.1.0 2017年5月18日

#7 in #workaround


vault_client中使用

MIT/Apache

5KB
88

futures-error-chain

此库是futures-rs和error-chain crate之间无需额外配置即可正常工作时的解决方案

用法

就像使用error-chain crate一样,您运行future_chain!宏,该宏将创建与error-chain crate一起工作所需的代码。

示例

#![recursion_limit = "1024"]

#[macro_use]
extern crate error_chain;

extern crate futures;
extern crate futures_cpupool;

#[macro_use]
extern crate futures_error_chain;

mod foo {
    mod errors {
        error_chain! {
            errors {
                Foo(err: String) {
                    description("Foo error")
                    display("Foo error: {}", err)
                }
            }
        }

        future_chain!{}
    }

    pub use self::errors::*;

    use futures::future;

    fn bar() -> FutureChain<String> {
        future::err(ErrorKind::Foo("bar".to_owned()).into()).boxed()
    }

    fn bar2() -> FutureChain<String> {
        future::ok("bar2".to_owned()).boxed()
    }

    pub fn foo() -> FutureChain<String> {
        bar().and_then(|_| bar2()).chain_err(|| "foo")
    }
}

mod errors {
    error_chain! {
        links {
            Foo(::foo::Error, ::foo::ErrorKind);
        }
    }
}

use errors::*;

fn my_main() -> Result<()> {
    use futures_cpupool::CpuPool;
    use futures::Future;

    let pool = CpuPool::new_num_cpus();

    let f = foo::foo();
    let f2 = pool.spawn(f);

    f2.wait()?;

    Ok(())
}

quick_main!(my_main);

依赖项

~53KB