```rust
pub struct WaitGroup {};
pub struct WaitGroupFuture {};
pub struct Done {};
impl WaitGroup {
pub fn done(&self) -> Done;
}
impl Clone for Done;
impl Drop for Done;
impl IntoFuture for WaitGroup {
type Future = WaitGroupFuture;
fn into_future(self) -> Self::Future;
}
let wg = WaitGroup::new();
for i in 0..10 {
let done = wg.done();
task::spawn(async move {
drop(done);
});
}
wg.await;
```
pub strcut BuildOption {
enable_gas_metering : bool,
}
impl BuildOption {
pub fn new() -> BuildOption {
BuildOption { enable_gas_metering: false}
}
pub fn gas_metering(mut self, enable : bool) -> Self {
self.enable_gas_metering = enable
self
}
}
BuildOption::new().enable_gas_metering()