File tree Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Expand file tree Collapse file tree 1 file changed +48
-0
lines changed Original file line number Diff line number Diff line change 1+ #![ feature( pin_macro) ]
2+
3+ use core:: future:: Future ;
4+ use core:: pin:: Pin ;
5+ use core:: task:: { Context , Poll } ;
6+
7+ use std:: sync:: Arc ;
8+
9+ struct NopWaker ;
10+
11+ impl std:: task:: Wake for NopWaker {
12+ fn wake ( self : Arc < Self > ) { }
13+ }
14+
15+ pub fn fuzzing_block_on < O , F : Future < Output = O > > ( fut : F ) -> O {
16+ let mut fut = std:: pin:: pin!( fut) ;
17+ let waker = std:: task:: Waker :: from ( Arc :: new ( NopWaker ) ) ;
18+ let mut context = std:: task:: Context :: from_waker ( & waker) ;
19+ loop {
20+ match fut. as_mut ( ) . poll ( & mut context) {
21+ Poll :: Ready ( v) => return v,
22+ Poll :: Pending => { }
23+ }
24+ }
25+ }
26+
27+ pub struct LastFuture < S > {
28+ last : S ,
29+ }
30+
31+ impl < S > Future for LastFuture < S >
32+ where
33+ Self : Unpin ,
34+ S : Unpin + Copy ,
35+ {
36+ type Output = S ;
37+
38+ fn poll ( self : Pin < & mut Self > , _cx : & mut Context < ' _ > ) -> Poll < Self :: Output > {
39+ return Poll :: Ready ( self . last ) ;
40+ }
41+ }
42+
43+ fn main ( ) {
44+ fuzzing_block_on ( async {
45+ LastFuture { last : & 0u32 } . await ;
46+ LastFuture { last : Option :: < u32 > :: None } . await ;
47+ } ) ;
48+ }
You can’t perform that action at this time.
0 commit comments