A final proposal for await syntax

This may change in future, plus I think using chained for as a more powerful for_each (you can return and break) is not a bad use-case.

Another keyword which may be used in chaining is yield if we'll get generators with resume argument.

And if chaining may be extended to support if let, which will make it more powerful.

Also I personally wouldn't exclude keywords which evaluate to ! or () right away. It may be worth to keep whole expression in "reverse" order to minimize number of cognitive context switches:

// I will use @ instead of dot in this example
connection
    .handshake()
    @await
    @if let Handshake::Success(body) {
        body
    } else {
        return Err("handshake failure");
    }
    .get_body()
    @await?
    .process()
    @return;