graph BT
  raw_handle[zx_handle_t]
  owned_handle[zx::Handle]
  owned_channel[zx::Channel]
  server_end[ServerEnd<TicTacToeMarker>]
  async_channel[AsyncChannel]
  serve_inner[ServeInner]
  request_stream[TicTacToeRequestStream]

  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-- ServerEnd::from() -->server_end
  server_end-- .into_channel() -->owned_channel

  async_channel-- ServeInner::new() -->serve_inner
  serve_inner-- .into_channel() -->async_channel

  serve_inner-- RequestStream::from_inner() -->request_stream
  server_end-- .into_stream() -->request_stream
  request_stream-- ".into_inner()" -->serve_inner
  async_channel-- RequestStream::from_channel() -->request_stream