graph BT raw_handle[zx_handle_t] owned_handle[zx::Handle] owned_channel[zx::Channel] client_end[ClientEnd<TicTacToeMarker>] async_channel[AsyncChannel] proxy[TicTacToeProxy] raw_handle-- zx::Handle::from_raw() -->owned_handle owned_handle-- .into_raw() -->raw_handle owned_handle-- zx::Channel::from() -->owned_channel owned_channel-- zx::Handle::from() -->owned_handle owned_channel-- AsyncChannel::from_channel() -->async_channel async_channel-- .into_zx_channel() -->owned_channel owned_channel-- ClientEnd::from() -->client_end client_end-- .into_proxy() -->proxy client_end-- .into_channel() -->owned_channel async_channel-- Proxy::from_channel() -->proxy proxy-. ".into_client_end()" .-> client_end proxy-. ".into_channel()" .->async_channel %% following edges help disambiguate clientend and proxy in layout client_end ~~~ async_channel async_channel ~~~ client_end client_end ~~~ owned_channel owned_channel ~~~ client_end