]>
git.proxmox.com Git - rustc.git/blob - src/test/run-pass/issue-18188.rs
059d25173c2ad75e57f88fa3f2b979a13092eeb2
1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 // pretty-expanded FIXME #23616
13 #![feature(unboxed_closures, std_misc)]
15 use std
::thunk
::Thunk
;
17 pub trait Promisable
: Send
+ Sync {}
18 impl<T
: Send
+ Sync
> Promisable
for T {}
19 pub fn propagate
<'a
, T
, E
, F
, G
>(action
: F
) -> Thunk
<'a
, (Result
<T
, E
>,), Result
<T
, E
>>
21 T
: Promisable
+ Clone
+ 'a
,
22 E
: Promisable
+ Clone
+ 'a
,
23 F
: FnOnce(&T
) -> Result
<T
, E
> + Send
+ 'a
,
24 G
: FnOnce(Result
<T
, E
>) -> Result
<T
, E
> + 'a
{
25 Box
::new(move |result
: Result
<T
, E
>| {
27 Ok(ref t
) => action(t
),
28 Err(ref e
) => Err(e
.clone()),