1 // compile-flags: --edition=2018
2 #![feature(coverage_attribute)]
5 ($msg
:literal $
(,)?
) => {
11 return Err(String
::from($msg
));
15 macro_rules
! on_error
{
16 ($value
:expr
, $error_message
:expr
) => {
17 $value
.or_else(|e
| { // FIXME(85000): no coverage in closure macros
18 let message
= format
!($error_message
, e
);
19 if message
.len() > 0 {
20 println
!("{}", message
);
21 Ok(String
::from("ok"))
29 fn load_configuration_files() -> Result
<String
, String
> {
30 Ok(String
::from("config"))
33 pub async
fn test() -> Result
<(), String
> {
34 println
!("Starting service");
35 let config
= on_error
!(load_configuration_files(), "Error loading configs: {}")?
;
37 let startup_delay_duration
= String
::from("arg");
38 let _
= (config
, startup_delay_duration
);
44 executor
::block_on(test()).unwrap();
51 task
::{Context, Poll, RawWaker, RawWakerVTable, Waker}
,
55 pub fn block_on
<F
: Future
>(mut future
: F
) -> F
::Output
{
56 let mut future
= unsafe { Pin::new_unchecked(&mut future) }
;
57 use std
::hint
::unreachable_unchecked
;
58 static VTABLE
: RawWakerVTable
= RawWakerVTable
::new(
60 |_
| unsafe { unreachable_unchecked() }
, // clone
62 |_
| unsafe { unreachable_unchecked() }
, // wake
64 |_
| unsafe { unreachable_unchecked() }
, // wake_by_ref
68 let waker
= unsafe { Waker::from_raw(RawWaker::new(core::ptr::null(), &VTABLE)) }
;
69 let mut context
= Context
::from_waker(&waker
);
72 if let Poll
::Ready(val
) = future
.as_mut().poll(&mut context
) {